2016-11-29 4 views
0

이것을 실행하면 왜 음수가 표시됩니까?부호없는 int를 음수로 비트 시프트 할 수있는 방법은 무엇입니까?

unsigned int a = 1 << 31; 
printf("%d",a); 

이미 컴퓨터에서 정수 크기를 확인했으며 4 바이트입니다. 그래서 내 정수는 32 비트로 구성되어 있고 가장 중요한 비트까지 왼쪽으로 31 교대를하고 있습니다. 그것은 양수 여야 함을 의미하지만 항상 부정적입니다.

내가 무엇을 얻을 : -2147483648

내가 기대했던 : 일부 양수 (아마 1073741824)

내가 무슨 말이냐?

+2

을! –

+0

'printf ("% u", a);'수정해야합니다. –

답변

0

% u를 printf 형식 문자열로 사용하십시오.

는 의미

printf("%u",a); 
0

(%d 대신 %u의), 당신은 아마 기호에 1 이동에 의해 정의되지 않은 동작을 호출하고 비트 피연산자, this answer에 명시된 바와 같이. 그것을 해결하기 위해
는 부호없는 문자를 사용 서명으로 당신이 그것을 인쇄하고

unsigned int a = 1u << 31; 
//    ^