ค่า (วิทยาการคอมพิวเตอร์)

จากวิกิพีเดีย สารานุกรมเสรี

ค่า ในทางวิทยาการคอมพิวเตอร์ หมายถึงการแปลความหมายลำดับบิตตามข้อกำหนดของชนิดข้อมูลบางชนิด ลำดับบิตที่เหมือนอาจมีค่าที่แตกต่างกัน ขึ้นอยู่กับชนิดข้อมูลที่นำมาใช้ตีความ ค่าอาจเป็นจำนวนเต็ม จำนวนจุดลอยตัว หรือสายอักขระ เป็นอาทิ

ค่าบางประเภทเป็นสิ่งสามัญที่พบได้ในภาษาโปรแกรมหลายภาษา (เช่นตัวแทนจำนวนประเภทต่าง ๆ) ในขณะที่บางภาษารองรับค่าที่พบได้น้อยกว่า (เช่นภาษาปาสกาลรองรับชนิดตัวแปรเซต)

ในภาษาเชิงประกาศระดับสูง ค่าจะต้องมีคุณสมบัติความโปร่งใสเชิงอ้างอิง (referential transparency) หมายความว่าค่าที่เป็นผลลัพธ์ เป็นอิสระจากตำแหน่งหน่วยความจำที่เก็บบันทึกซึ่งนิพจน์จำเป็นต้องใช้คำนวณ เฉพาะข้อมูลที่ตำแหน่งนั้น (คือบิตต่าง ๆ อันประกอบด้วย 0 และ 1) และการแปลผลของมันเท่านั้นที่มีนัยสำคัญ ค่าเป็นรูปแบบบรรทัดฐานของนิพจน์ หมายความว่านิพจน์ที่เป็นค่า ไม่สามารถลดทอนให้เป็นนิพจน์ที่ง่ายกว่าได้อีกต่อไป ตัวอย่างเช่น ค่าที่เกิดจากนิพจน์ "1 + 2" คือ "3" ซึ่งค่า "3" นี้ไม่สามารถลดทอนลงได้อีก

ค่าทางซ้ายและค่าทางขวา[แก้]

ภาษาโปรแกรมบางภาษาใช้แนวคิด ค่าทางซ้าย และ ค่าทางขวา (lvalue และ rvalue) กล่าวคือ ค่าทางซ้ายเป็นค่าที่มีตำแหน่งหน่วยความจำที่สามารถเข้าถึงได้โดยโปรแกรมที่กำลังทำงาน (โดยผ่านทางตัวดำเนินการตำแหน่งเช่น "&" ในภาษาซีพลัสพลัสเป็นต้น) หมายความว่าค่าทางซ้ายจะเป็นตัวแปร หรือตัวอ้างอิงที่ถูกอ้างอิงกลับไปยังตำแหน่งที่เจาะจง ส่วนค่าทางขวาอาจเป็นได้ทั้งเหมือนค่าทางซ้ายหรือไม่เหมือนก็ได้ (วลี ค่าทางขวา ถูกใช้เพียงเพื่อแยกแยะให้ต่างจาก ค่าทางซ้าย เท่านั้น) ความหมายดั้งเดิมของค่าทางซ้ายในภาษาซีคือ ค่าที่อยู่ทางซ้ายมือของตัวดำเนินการกำหนดค่า ซึ่งสามารถกำหนดค่าให้ได้ แต่เนื่องจาก const ถูกเพิ่มเข้ามาในภาษา ทำให้แนวคิดเปลี่ยนไปเรียกว่า ค่าทางซ้ายดัดแปรได้ (modifiable lvalue) แทน

ภาษาซีพลัสพลัสโอเอกซ์ได้แนะนำสัญลักษณ์พิเศษไว้คือ "&&" ใช้แสดง การใช้หรือการเข้าถึงตำแหน่งที่อยู่ของนิพจน์ สำหรับตัวแปลโปรแกรมเท่านั้น ด้วยเหตุว่าตำแหน่งที่อยู่ไม่สามารถรับมาได้โดยใช้ "&" ในขณะโปรแกรมทำงานเป็นตัวอย่าง การอ้างอิงเช่นนี้สามารถใช้ได้กับค่าทางขวา ทุกค่า นั่นคือรวมทั้งค่าที่เหมือนและไม่เหมือนค่าทางซ้ายทั้งหมด

นิพจน์ค่าทางซ้ายเป็นตัวกำหนด (หรืออ้างถึง) วัตถุ ค่าทางซ้ายประเภทดัดแปรไม่ได้ สามารถระบุตำแหน่งได้แต่เปลี่ยนแปลงค่าไม่ได้ ส่วนค่าทางซ้ายประเภทดัดแปรได้ อนุญาตให้วัตถุที่กำหนดสามารถระบุตำแหน่งและเปลี่ยนแปลงค่าได้ด้วย สำหรับค่าทางขวาสามารถเป็นนิพจน์อะไรก็ได้ รวมทั้งนิพจน์ที่ไม่มีการระบุตำแหน่ง ตัวอย่างเช่นเรามีนิพจน์ภาษาซี 4 + 9 เมื่อทำงานแล้ว คอมพิวเตอร์จะสร้างค่าจำนวนเต็มออกมาเป็น 13 แต่โปรแกรมไม่ได้ระบุตำแหน่งว่าให้ค่า 13 เก็บบันทึกอยู่ที่ใดในคอมพิวเตอร์ นิพจน์นี้จึงเป็นค่าทางขวาเพราะไม่ระบุตำแหน่ง ในทางกลับกัน หากโปรแกรมประกาศตัวแปร x ขึ้นมา แล้วกำหนดค่า 13 ลงใน x ดังนั้น x จึงเป็นค่าทางซ้ายและมีค่าเป็น 13 ด้วย

แนวคิดสัญกรณ์ค่าทางซ้ายและค่าทางขวาเสนอแนะขึ้นครั้งแรกในภาษาซีพีแอล

ในภาษาแอสเซมบลี[แก้]

ค่าที่ใช้ในภาษาแอสเซมบลีสามารถเป็นข้อมูลเสมือนอะไรก็ได้โดยชนิดข้อมูลที่กำหนด ตัวอย่างเช่นสายอักขระ ตัวเลข หรือตัวอักษรตัวเดียว

ตัวประมวลผลส่วนใหญ่มีชุดคำสั่งหนึ่งชุดหรือมากกว่านั้นเพื่อเก็บบันทึก "ค่าใช้ทันที" (immediate value) ค่าใช้ทันทีที่เก็บไว้จะเป็นส่วนหนึ่งของชุดคำสั่งเมื่อเรียกใช้งาน ซึ่งมักจะบรรจุเข้า บวกเพิ่ม หรือลบออกจากเรจิสเตอร์ ชุดคำสั่งส่วนอื่นเป็นรหัสปฏิบัติการและเป้าหมาย อย่างหลังนี้บอกเป็นนัยว่า ค่าที่ไม่ได้ใช้ทันทีอาจยังหลงเหลืออยู่ในเรจิสเตอร์ หรือถูกเก็บอยู่ที่ใดสักแห่งในหน่วยความจำ ซึ่งจำเป็นต้องใช้ชุดคำสั่งที่มีการระบุตำแหน่งทางตรงหรือทางอ้อมไปยังค่านั้น

ตัวประมวลผลบางชนิดรองรับค่าใช้ทันทีที่มีขนาดมากกว่าหนึ่งหน่วย เช่น 8 บิตหรือ 16 บิต โดยใช้รหัสปฏิบัติการและรหัสช่วยจำที่เป็นเอกลักษณ์สำหรับแต่ละชุดคำสั่งที่แตกต่างกัน หากโปรแกรมเมอร์ให้ค่าของข้อมูลที่ไม่เหมาะสม แอสเซมเบลอร์จะแจ้งเตือนข้อความผิดพลาด "เกินพิสัย" (out of range) แอสเซมเบลอร์ส่วนมากอนุญาตให้ค่าใช้ทันทีแสดงออกเป็นข้อมูลแอสกี เลขฐานสิบ ฐานสิบหก ฐานแปด หรือฐานสอง ดังนั้นตัวอักขระ "A" จึงมีความหมายเหมือนกับ "65" หรือ "0x41" เป็นต้น ลำดับไบต์ของสายอักขระอาจต่างกันไปในตัวประมวลผล ขึ้นอยู่กับแอสเซมเบลอร์และสถาปัตยกรรมคอมพิวเตอร์

แหล่งข้อมูลอื่น[แก้]