22.6 연습문제: 비트 논리 연산자 사용하기

다음 소스 코드를 완성하여 5, 4, 1, 250이 각 줄에 출력되게 만드세요.

practice_bitwise_logical_operator.c

#include <stdio.h>
 
int main()
{
    unsigned char num1 = 1;
    unsigned char num2 = 5;
 
    printf("%u\n", num1 ___ num2);
    printf("%u\n", num1 ___ num2);
    printf("%u\n", num1 ___ num2);
 
    num1 = ____ num2;
    printf("%u\n", num1);
 
    return 0;
}

실행 결과

5
4
1
250

정답

 |
 ^
 &
 ~

해설

num1의 1과 num2의 5를 비트 연산하여 5, 4, 1, 250이 나와야 합니다. 여기서 1과 5를 2진수로 바꾸면 풀기가 쉽습니다.

0000 0001(1)
0000 0101(5)

0000 00010000 0101을 비트 연산하여 5가 나오려면 0101이 그대로 보존되어야 하므로 |로 연산하면 됩니다. 그리고 4가 나오려면 0100만 남으면 되는데 두 비트가 다를 때 1인 것을 알 수 있습니다. 따라서 ^로 연산하면 됩니다. 그리고 1이 나오려면 0001만 남으면 되므로 &로 연산하면 됩니다.

num1num2를 비트 연산한 뒤 할당했는데 250이 나오고 있습니다. 먼저 250을 비트로 바꿔보면 1111 1010이므로 0000 0101을 뒤집었다는 것을 알 수 있습니다. 따라서 ~로 연산하면 됩니다.

0000 0101(5)
_________ ~
1111 1010(250)