24.6 연습문제: 시프트 연산과 플래그 활용하기

다음 소스 코드를 완성하여 4 0이 출력되게 만드세요.

practice_bitwise_flag.c

#include <stdio.h>
 
int main()
{
    unsigned char flag1 = 1 << 7;
    unsigned char flag2 = 1 << 3;
 
    flag1 |=     <<    ;
    flag1 &=     <<    ;
    flag2 ^=     <<    ;
 
    printf("%u %u\n", flag1, flag2);
 
    return 0;
}

실행 결과

4 0

정답

 1 << 2
 ~(1 << 7)
 1 << 3

해설

1 << 71000 0000(128)입니다. 이 값의 비트를 변경하여 0000 0100(4)로 만들어야 합니다. 먼저 |= 연산자에 1 << 2를 넣어서 1000 0100(132)로 만듭니다. 그리고 &= 연산자로 첫 번째 비트를 꺼야 하는데 이때는 ~(1 << 7)과 같이 시프트 연산자로 1000 0000을 만든 뒤 비트를 뒤집어주면 됩니다. 단, 시프트 연산 결과를 뒤집어야 하므로 반드시 괄호로 묶어줍니다.

1 << 30000 1000(8)입니다. 이 값의 비트를 변경하여 0000 0000(0)을 만들어야 합니다. ^= 연산자가 주어졌으므로 비트를 토글하면 됩니다. 따라서 1 << 3을 넣어주면 1인 비트를 토글하여 모두 0이 됩니다.