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 :다음 두 프로그램이 서로 다른 결과를 산출하는 이유는 무엇입니까? (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
두 코드 단편이 유도 인 int
의 비트 수가 32 비트 이하인 경우 정의되지 않은 동작이 발생합니다. [expr.shift]/1
동작이 정의되지 오른쪽 항은 음수 또는 보다 크거나 촉진 왼쪽 피연산자의 비트 단위의 길이와 동일한 경우.
따라서 구현은 어떠한 방식으로도 일관된 결과를 제공 할 의무가 없습니다.
'int'가 플랫폼에서 32 비트라고 가정하면 32 비트 이동은 정의되지 않은 동작을 초래합니다. –
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) –
위의 가능한 중복 –