C에서 <<연산자에 대한 질문(가벼운질문입니다!)
조회수 391회
#include <stdio.h>
int main(void) {
int num1 = 8,num2 = 0;
int num3 = num1 << 2;
printf("num1 = %d\n",num1);
num1 << 2;
printf("num1<<2 = %d\n",num1); // A
num2 = num1 << 2;
printf("num2 = %d\n",num1); // B
printf("num3 = %d\n",num3); // C
return 0;
}
실행결과 :
num1 = 8
num1<<2 = 8
num2 = 8
num3 = 32
num1<<2의 의미는 num1의 비트열을 2칸씩 왼쪽으로 이동시킨 결과를 반환하라 이지 않습니까?
비트연산이후 반환을 할 뿐 num1의 값은 변하지 않으므로 num1은 8임을 알 수 있었습니다. (주석A)
그렇지만 (주석B)와 (주석C)에서 의문이 생겼습니다.
num2는 선언 이후에 대입연산자를 통해 비트연산값을 대입하였고
num3는 선언과 동시에 초기화할 때 비트연산값을 대입하였습니다.
제 생각에는 num2나 num3가 32가 나와야했는데 결과는 그렇지 않네요.
왜 이렇게 되는 건가요?
댓글 입력