Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C/C++ R-값 표현식에 대한 수수께끼?

<시간/>

여기서 우리는 하나의 퍼즐을 볼 것입니다. 아래와 같이 주어진 프로그램이 있다고 가정하면, 우리는 무엇을 출력할 것이며 그 이유를 말해야 합니까?

예시

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

그럼 출력은 어떻게 될까요? ~x는 보수 연산을 수행하고 있습니다. 그러면 보완된 결과를 16진수 형식으로 표시합니까?

음 출력은 다음과 같습니다.

출력

ab

따라서 변경 사항이 없습니다. 하지만 왜? 그 이유는 ~x가 x를 보완된 형식으로 변환하지만 그 값은 어떤 변수에도 할당되지 않기 때문입니다. 표현식은 R-값 표현식입니다. Lvalue가 사용될 때까지 일부 변수에 저장되지 않습니다. L-값을 넣으면 다음과 같이 됩니다. -

예시

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

출력

ffffff54