문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> int main() { unsigned char mask = 0xAB; unsigned char target = 0x5D; unsigned char temp = mask; temp <<= 2; temp &= 0xFC; target ^= temp; target |= (mask >> 4); printf("%X", target & 0xFF); return 0; }
정답
FB
FBfb
해설
단계별로 계산하면 다음과 같다.
- mask = 0xAB, target = 0x5D
- temp = mask = 0xAB
- temp <<= 2 → 0xAB << 2 = 0x2AC, unsigned char에 저장되므로 하위 8비트만 남아 0xAC
- temp &= 0xFC → 0xAC & 0xFC = 0xAC
- target ^= temp → 0x5D ^ 0xAC = 0xF1
- mask >> 4 = 0x0A
- target |= 0x0A → 0xF1 | 0x0A = 0xFB
- target & 0xFF = 0xFB 따라서 최종 출력은 FB이다.