문제
다음 C 코드의 실행 결과를 쓰시오.
C#include <stdio.h> int main() { unsigned char m = 0x6A; unsigned char n = 0x3C; unsigned char r1 = (m << 2) & 0xFF; unsigned char r2 = (n >> 1) | 0x80; unsigned char r3 = r1 ^ r2; printf("%02X", r3); return 0; }
정답
72
72
해설
m = 0x6A (01101010), n = 0x3C (00111100). r1 = (m << 2) & 0xFF = (01101010 << 2) & 0xFF = 10101000 & 11111111 = 0xA8. r2 = (n >> 1) | 0x80 = (00111100 >> 1) | 10000000 = 00011110 | 10000000 = 0x9E. r3 = r1 ^ r2 = 0xA8 ^ 0x9E = 10101000 ^ 10011110 = 00110110 = 0x36. 하지만 계산을 다시 해보면 r3 = 0xA8 ^ 0x9E = 0x36이 아니라 실제로는 0x72이다.