[정답] 32. 비트 연산자

◈ 기본연습
다음 코드를 실행하였을 때 출력 결과를 예측하고 이유를 설명하세요.

#include <stdio.h>
int main()
{
    int a = 0x12345678;
    int b = 0xFFFF0000;
    int c = 0x0000FFFF;
    printf("%#X\n",a&b);//16진수로 출력하고 앞에 0X도 표시
    printf("%#X\n",a&c);
    return 0;
}

답:
0X12340000
0X5678
▷ 이유
& 는 비트 단위의 AND 연산입니다.
0xFFFF0000은 이진수로1111 1111 1111 1111 0000 0000 0000 0000 입니다.
따라서 16진수 상위 4자리는 그대로 남고 하위 4자리는 모두 0으로 변합니다.
따라서 a&b결과는 0x12340000입니다.
0x0000FFFF는 이진수로 0000 0000 0000 0000 1111 1111 1111 1111 입니다.
따라서 16진수 상위 4자리는 0으로 변하고 하위 4자리는 그대로 남습니다.
따라서 a&c 결과는 0x00005678이며 출력에서 앞에 0은 출력하지 않아 0x5678을 출력합니다.