표준 입력으로 두 정수가 입력됩니다(입력 값의 범위는 0~255). 플래그에 다음과 같은 연산을 하여 결과가 출력되게 만드세요.
표준 입력
1 64
표준 출력
136
judge_bitwise_flag.c
#define __USE_MINGW_ANSI_STDIO 1 // Dev-C++(MinGW)에서 %hhu를 사용하기 위한 설정
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
unsigned char flag = 16;
unsigned char num1, num2;
scanf("%hhu %hhu", &num1, &num2);
___________________
___________________
___________________
printf("%u\n", flag);
return 0;
}
정답
flag |= num1 << 3;
flag &= ~(num2 >> 2);
flag ^= 128;
풀이
flag의 비트를 켜는 방법은 flag |= 마스크이다. 1번 조건이 num1의 비트를 왼쪽으로 3번 이동한 값으로 flag의 비트를 켜는 것이므로 여기서 마스크가 num1의 비트를 왼쪽으로 3번 이동한 값이다. 따라서 1번 조건은 flag |= num1 << 3;과 같이 코드로 표현할 수 있다. 다음, 2번 조건에서 flag의 비트를 켜는 방법은 flag &= 마스크이고, num2의 비트를 오른쪽으로 2번 이동하고 그 값으로 비트를 꺼야 하므로 flag &= num2 >> 2와 같이 표현하였다. 마지막으로, 비트를 토글하는 방법은 flag ^= 마스크이고, 토글이란? 켜져 있는 비트는 끄고,
꺼져있는 비트는 켜는 것을 뜻한다. 따라서 flag의 첫 번째 비트를 토글해야 하므로 첫 번째 비트를 나타내는 값인 128로 flag ^= 128;과 같이 표현할 수 있다.
'C' 카테고리의 다른 글
[C] C언어 코딩 도장 26.8 심사문제: 음료수 자판기 만들기 (0) | 2022.04.27 |
---|---|
[C] C언어 코딩 도장 25.7 심사문제: 괄호 사용하기 (0) | 2022.04.27 |
[C] C언어 코딩 도장 23.9 심사문제: 시프트 연산자 사용하기 (0) | 2022.04.26 |
[C] C언어 코딩 도장 23.8 심사문제: 비트 논리 연산자 사용하기 (0) | 2022.04.26 |
[C] C언어 코딩 도장 22.8 심사문제: 불 자료형 사용하기 (0) | 2022.04.26 |