[정답] 디딤돌 C언어 34. 쉬프트 연산자
[정답] 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로 나눈 효과를 갖습니다.