문제
다음 C 코드의 출력 결과로 가장 적절한 것은?
C#include <stdio.h> typedef struct student { char* name; int score[3]; } Student; int dec(int enc) { return enc & 0xA5; } int sum(Student* p) { return dec(p->score[0]) + dec(p->score[1]) + dec(p->score[2]); } int main() { Student s[2] = { "Kim", {0xA0, 0xA5, 0xDB}, "Lee", {0xA0, 0xED, 0x81} }; int result = 0; for (int i = 0; i < 2; i++) { result += sum(&s[i]); } printf("%d", result); return 0; }
① 908 ② 806 ③ 512 ④ 1024
정답
1번
해설
정답: 1. 각 점수에 대해 비트 AND 연산 enc & 0xA5를 수행하면 160, 165, 129, 160, 165, 129가 된다. 이를 모두 합산하면 908이다.
오답 풀이
- 1번: 비트 AND 결과를 모두 합산한 값이다.
- 2번: 일부 16진수 값을 10진수로 잘못 변환한 값이다.
- 3번: AND 연산 대신 일부 값만 더한 경우이다.
- 4번: 16진수 자리수를 단순 합산한 값과 혼동한 것이다.
보충 개념
C에서 &는 비트 단위 AND 연산자이다. 16진수 값을 2진수로 변환해 같은 자리의 비트가 모두 1인 경우만 1로 남는다.