Ở đây chúng ta sẽ xem một câu đố. Giả sử có một chương trình như dưới đây, chúng ta phải nói kết quả sẽ là gì và tại sao?
Ví dụ
#include<iostream>
using namespace std;
int main() {
int x = 0xab;
~x;
cout << hex << x;
}Vậy kết quả sẽ là gì? Toán tử ~x thực hiện phép bổ sung. Vậy nó có hiển thị kết quả đã bổ sung dưới dạng hex không?
Kết quả thực tế như sau:
Kết quả
ab
Vậy không có sự thay đổi nào. Nhưng tại sao? Lý do là ~x chuyển đổi x thành dạng bổ sung, nhưng giá trị đó không được gán cho bất kỳ biến nào. Biểu thức này là biểu thức R-value. Cho đến khi L-value được sử dụng, nó sẽ không được lưu trữ vào bất kỳ biến nào. Nếu chúng ta dùng L-value, nó sẽ trông như sau:
Ví dụ
#include<iostream>
using namespace std;
int main() {
int x = 0xab;
x = ~x;
cout << hex << x;
}Kết quả
ffffff54