2

프로그램 1 :다음 두 프로그램이 서로 다른 결과를 산출하는 이유는 무엇입니까? (C++, 비트 연산 2012 VS)

int x = 4^(4>>32); 
cout << x << endl; 

출력 4

프로그램 2 :

int x = 4; 
int y = x^(x>>32); 
cout << y << endl; 

출력 0

+1

'int'가 플랫폼에서 32 비트라고 가정하면 32 비트 이동은 정의되지 않은 동작을 초래합니다. –

+1

int가 32 비트이면 [32 이상으로 오른쪽 시프트가 정의되지 않은 동작] (http://stackoverflow.com/questions/18918256/is-right-shift-undefined-behavior-if-the-count-is-larger) -than-the-width-of-t/18918340 # 18918340) –

+0

위의 가능한 중복 –

답변

2

두 코드 단편이 유도 인 int의 비트 수가 32 비트 이하인 경우 정의되지 않은 동작이 발생합니다. [expr.shift]/1

동작이 정의되지 오른쪽 항은 음수 또는 보다 크거나 촉진 왼쪽 피연산자의 비트 단위의 길이와 동일한 경우.

따라서 구현은 어떠한 방식으로도 일관된 결과를 제공 할 의무가 없습니다.