19. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.
#include
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} };
Student* p = s;
int result = 0;
for (int i = 0; i < 2; i++) {
result += sum(&s[i]);
}
printf("%d", result);
return 0;
}
GPT 풀이
*구조체 배열 선언 부분
Student s[2] = {
\"Kim\", {0xA0, 0xA5, 0xDB},
\"Lee\", {0xA0, 0xED, 0x81}
};
다음과 같이 해석된다.
| 인덱스 | name | score[0] | score[1] | score[2] |
| :--: | :---: | :------: | :------: | :------: |
| s[0] | \"Kim\" | 0xA0 | 0xA5 | 0xDB |
| s[1] | \"Lee\" | 0xA0 | 0xED | 0x81 |
*dec() 함수
int dec(int enc) {
return enc & 0xA5;
}
-비트 AND 연산을 수행
-0xA5는 16진수로, 2진수로 표현하면 0xA5 = 1010 0101 (2진수)
*각 score에 대해 dec() 수행
->s[0]의 점수들
| score | 16진수 | 2진수 | `& 0xA5` 결과 (2진수) | 10진수 |
| :---- | :-------- | :------------ | :---------------- | :--------- |
| 0xA0 | 1010 0000 | AND 1010 0101 | 1010 0000 | 0xA0 = 160 |
| 0xA5 | 1010 0101 | AND 1010 0101 | 1010 0101 | 0xA5 = 165 |
| 0xDB | 1101 1011 | AND 1010 0101 | 1000 0001 | 0x81 = 129 |
->합계 = 160 + 165 + 129 = 454
->s[1]의 점수들
| score | 16진수 | 2진수 | `& 0xA5` 결과 (2진수) | 10진수 |
| :---- | :-------- | :------------ | :---------------- | :--------- |
| 0xA0 | 1010 0000 | AND 1010 0101 | 1010 0000 | 0xA0 = 160 |
| 0xED | 1110 1101 | AND 1010 0101 | 1010 0101 | 0xA5 = 165 |
| 0x81 | 1000 0001 | AND 1010 0101 | 1000 0001 | 0x81 = 129 |
*main()의 반복문
for (int i = 0; i < 2; i++) {
result += sum(&s[i]);
}
s[0] → 454
s[1] → 454
따라서 result = 454 + 454 = 908
최종 출력
printf(\"%d\", result);
출력값 : 908
요약
s[0]의 합 = 454
s[1]의 합 = 454
총합(출력) = 908
자유 댓글