ที่นี่เราจะเห็นปริศนาตัวหนึ่ง สมมติว่ามีโปรแกรมที่ให้มาตามข้างล่างนี้ต้องบอกว่าผลงานออกมาเป็นอย่างไร เพราะอะไร
ตัวอย่าง
#include<iostream> using namespace std; int main() { int x = 0xab; ~x; cout << hex << x; }
แล้วผลงานจะเป็นอย่างไร? ~x กำลังดำเนินการเสริม มันแสดงผลสมบูรณ์ในรูปแบบฐานสิบหกหรือไม่
ผลลัพธ์จะเป็นดังนี้
ผลลัพธ์
ab
ดังนั้นจึงไม่มีการเปลี่ยนแปลง แต่ทำไม? เหตุผลก็คือ ~x กำลังแปลง x เป็นรูปแบบเสริม แต่ค่านั้นไม่ได้ถูกกำหนดให้กับตัวแปรใดๆ นิพจน์คือนิพจน์ค่า R จนกว่าจะใช้ค่า Lvalue มันจะไม่ถูกเก็บไว้ในตัวแปรบางตัว ถ้าเราใส่ค่า L มันจะออกมาเป็นแบบนี้ -
ตัวอย่าง
#include<iostream> using namespace std; int main() { int x = 0xab; x = ~x; cout << hex << x; }
ผลลัพธ์
ffffff54