ที่นี่เราจะเห็นปริศนาตัวหนึ่ง สมมติว่ามีโปรแกรมที่ให้มาตามข้างล่างนี้ต้องบอกว่าผลงานออกมาเป็นอย่างไร เพราะอะไร
ตัวอย่าง
#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