정보처리기사 실기C언어C - 비트 연산자난이도 3SHORT_ANSWER

정보처리기사 실기 C - 비트 연산자 기출문제 #598

문제

다음 C 코드의 실행 결과를 쓰시오.

C
#include <stdio.h> int main() { unsigned char x = 0xF5; unsigned char y = 0xA3; unsigned char mask = 0x0F; printf("%02X %02X %02X", (x & mask) | (y & ~mask), x << 2 & 0xFF, (x ^ y) >> 1); return 0; }

정답

A5 D4 2B

A5 D4 2B0xA5 0xD4 0x2Ba5 d4 2b

해설

변수 초기값을 2진수로 변환하면 다음과 같다.

x = 0xF5 = 1111 0101 y = 0xA3 = 1010 0011 mask = 0x0F = 0000 1111

───────────────────────────────────────── [1] 첫 번째 인자: (x & mask) | (y & ~mask) → 0xA5 ─────────────────────────────────────────

x의 하위 4비트와 y의 상위 4비트를 결합하는 nibble 교환 연산이다.

x & mask = 1111 0101 & 0000 1111 = 0000 0101 (0x05) └─ x의 하위 4비트만 추출

~mask = 1111 0000 (0xF0) y & ~mask = 1010 0011 & 1111 0000 = 1010 0000 (0xA0) └─ y의 상위 4비트만 추출

0x05 | 0xA0 = 0000 0101 | 1010 0000 = 1010 0101 = 0xA5 ✓

───────────────────────────────────────── [2] 두 번째 인자: x << 2 & 0xFF → 0xD4 ─────────────────────────────────────────

연산자 우선순위에 따라 (x << 2) & 0xFF 로 해석된다. C에서 비트 시프트는 int로 자동 승격 후 연산되므로 넘친 비트가 사라지지 않는다. & 0xFF 로 하위 8비트만 남긴다.

x = 0xF5 → int 승격 → 0x000000F5 = 0000 0000 ... 1111 0101 << 2 → 0x000003D4 = 0000 0000 ... 1101 0100 & 0xFF → 0x000000D4 = 1101 0100 = 0xD4 ✓

───────────────────────────────────────── [3] 세 번째 인자: (x ^ y) >> 1 → 0x2B ─────────────────────────────────────────

XOR 후 오른쪽으로 1비트 시프트한다. 괄호가 없으면 >> 우선순위가 ^ 보다 높아 오동작하므로 괄호 필수이다.

x ^ y = 1111 0101 ^ 1010 0011 = 0101 0110 (0x56)

1 = 0010 1011 = 0x2B ✓

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 연산자 우선순위 정리 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

표현식 해석 주의사항 ────────────────────────────────────────────────────────────── x << 2 & 0xFF (x << 2) & 0xFF << 가 & 보다 우선순위 높음 (x ^ y) >> 1 괄호 없으면 x ^ (y >> 1) >> 가 ^ 보다 우선순위 높음 ~mask int 승격 후 비트반전 & y 연산 시 상위 바이트 자동 소거

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.