정수 한 개를 입력했을 때 2를 곱해 출력하는 프로그램을 작성해보자.
(단, -1073741824 ~ 1073741823)
정수 한 개를 입력했을 때 2를 곱해 출력하는 프로그램을 작성해보자.
(단, -1073741824 ~ 1073741823)
정수 한 개가 입력된다.
(단, -1073741824 ~ 1073741823)
입력 받은 정수 * 2의 계산 결과가 출력된다.
1024
2048
정수*2 의 결과를 출력해도 되지만,
비트시프트연산자 <<, >> 는 정수를 2배로 곱하거나 나누어 계산해준다.
2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로 지정한 비트만큼 이동시켜 2배 만큼 늘어나거나 반으로 줄어드는데
예를 들어 6(십진수) -> 110(2진수)일 경우(이진법, 기수법참조)
왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0 이 주어진 수 만큼 추가되고,
6<<1 은 110를 왼쪽으로 한자리 이동해서 끝에 0을 추가하여 1100이 된다. 따라서 12(10진수)의 값이 된다.
오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우) 이나 1(음의 정수인 경우)이 주어진 수 만큼 추가된다.
6>>1은 110에서 오른쪽으로 한자리 이동해서 끝에 0이 사라진다. 따라서 11이되고 3(10진수)이된다.
범위(32비트)를 넘어가 이동되는 비트는 삭제된다.
[예시]
int a=10;
printf("%d", a<<1); //20 이 출력된다.
printf("%d", a>>1); //5 가 출력된다.
printf("%d", a<<2); //40 이 출력된다.
printf("%d", a>>2); //2 가 출력된다.