[정답] 34. 쉬프트 연산자

◈ 기본 연습
1. 다음 프로그램의 출력 결과를 예측하시오.

#include <stdio.h>
int main()
{
    unsigned u = 5;
    int i = -5;
    printf("%d \n",u<<3);
    printf("%d \n",i<<3); 
    return 0;
}

답:
40
-40
<< 연산을 한 번 하면 2를 곱한 효과를 갖습니다.
따라서 3자리 왼쪽으로 이동하였으므로 2의 3승인 8을 곱한 효과를 갖습니다.

2. 다음 프로그램의 출력 결과를 예측하고 이유를 설명하시오.
참고:
unsigned int 형식의 0x80000000은 2147483648
int 형식의 0x80000000은 -2147483648

#include <stdio.h>
int main()
{
    unsigned u1 = 100;
    unsigned u2 = 0x80000000;
    int i1 = 100;
    int i2 = 0x80000000;
    printf("%d \n",u1>>3);
    printf("%d \n",i1>>3);
 
    printf("%d %#X\n",u2>>3, u2>>3);
    printf("%d %#X\n",i2>>3, i2>>3 ); 
 
    return 0;
}

답:
12
12
268435456 0x10000000
-268435456 0xF0000000
>> 연산을 한 번 하면 2로 나눈 효과를 갖습니다.
따라서 3자리 오른쪽으로 이동하였으므로 2의 3승인 8로 나눈 효과를 갖습니다.