Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ปริศนาเกี่ยวกับ R-Value Expressions ใน C/C++

นี่คือปริศนาหนึ่ง โปรแกรมด้านล่างจะให้ผลลัพธ์อะไร และทำไม?

ตัวอย่าง

#include <iostream>
using namespace std;
int main() {
    int x = 0xab;
    ~x;
    cout << hex << x;
}

ผลลัพธ์จะเป็นอะไร? ~x ทำการคอมพลีเมนต์ แต่จะแสดงผลในรูป hex หรือไม่?

ผลลัพธ์

ab

ไม่มีการเปลี่ยนแปลงเลย แต่ทำไม? เพราะ ~x แปลง x เป็นคอมพลีเมนต์ แต่ค่านั้นไม่ได้ถูก assign ให้ตัวแปรใดๆ นิพจน์นี้เป็น R-value expression จนกว่าจะมี L-value มารับค่า มันจะไม่ถูกเก็บ ถ้าเราเขียนเป็น L-value จะได้ดังนี้

ตัวอย่างที่แก้ไข

#include <iostream>
using namespace std;
int main() {
    int x = 0xab;
    x = ~x;
    cout << hex << x;
}

ผลลัพธ์

ffffff54