2013-10-10 1 views
-5
하여 정수 시프트 왼쪽
main() 
{ 
    int i=-1,j=32,k; 
    k=i<<j; 
    printf("i=%d j=%d k=%d\n",i,j,k); 
} 

출력 : I는 k=-2을 J = (33)을 고려하고 있고, j는 = 34 K 개의 경우 = -4.its 32 시간 후에 반복하면비트 단위 이상 31 회

i=-1 j=32,k=-1 

왼쪽 shift 즉, j = 64 일 때 k는 -1이되고 j = 65이면 k = -2가됩니다. 논리적으로 비트가 없어야합니다. 즉 출력은 0입니다. 여기서 발생합니다.

죄송합니다. 나는 초보자이므로 컴파일러가 무엇을하는지 이해할 수 없다. 설명 할 수 있니?

+0

일반적인 동작 (표준화되지는 않았지만)은 32를 기준으로 시프트가 발생한다는 것을 알 수 있습니다. –

답변

0

값을 크기보다 같거나 크게 이동하면 의미있는 결과를 얻지 못할 수 있습니다. 표준에서 :

오른쪽 피연산자의 값이 음수 또는보다 크거나 촉진 왼쪽 피연산자 폭 동일한 경우, 동작이 정의 이다.