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

ปริศนาเกี่ยวกับนิพจน์ C/C++ R-Value?


ที่นี่เราจะเห็นปริศนาตัวหนึ่ง สมมติว่ามีโปรแกรมที่ให้มาตามข้างล่างนี้ต้องบอกว่าผลงานออกมาเป็นอย่างไร เพราะอะไร

ตัวอย่าง

#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