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가 나와야했는데 결과는 그렇지 않네요.

왜 이렇게 되는 건가요?

  • B주석 라인에 num1->num2로 바꾸시면 됩니다 간단한 실수이신듯 하네여 김동현 2021.4.6 18:28

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    오타가 있어서 그렇습니다.

    printf("num2 = %d\n",num1);      // B
    

    위의 코드를 아래와 같이 고쳐서 실행하세요.

    printf("num2 = %d\n",num2);      // B
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 헛;; 그렇네요. 감사합니다! 임지훈 2021.4.6 18:32

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)