1. 문제
C언어 연습문제를 풀어보았습니다.
출처 : https://open.kakao.com/o/gHaNATre
# include <stdio.h>
int main(int argc,char *arg[]){
int a=0xA5;
int b=0x0F;
printf("%x",a&b);
return 0;
}
2. 정답
더보기
정답은 5 입니다. A와 0 을 비트연산 & 하면 0이 되고, 5와 F 를 &하면 5가 되므로 0x05 즉 5가 답입니다.
3. 풀이
&&는 논리연산자이고 &는 비트 연산자입니다.
0x 어쩌구 하니 16진수인데 이것을 이진수로 변경하여 비트별로 일일이 비교해줘야 합니다.
머리를 쓰기 싫어서 무심코 디버깅 모드에서 확인해보려고 하였습니다.
https://www.onlinegdb.com/online_c_compiler#
Debugging 모드에서 Local Variables 를 보면 return 0 직전 a 의 값은 165 b 의 값은 15라고만 확인할 수 있습니다.
a,b 를 이진수로 표현해서 보는 방식의 코딩을 해주지 않으면 디버깅 모드가 큰 도움이 되지 않네요.
16진수 하나를 이진수로 표시하려면 4개의 비트가 필요하며 자리마다의 값은 8421입니다.
16진수 | 10진수 | 이진수 |
0 | 0 | 0000 |
F | 15 | 1111 |
A | 10 | 1010 |
5 | 5 | 0101 |
그러므로
16진수 | 이진수 | |
a | A5 | 11110101 |
b | 0F | 00001111 |
a&b | 00000101 |
00000101 은 십진수로 5이며 16진수로도 5입니다.
계산을 손으로 하고 보니 A&0 => 0 그리고 5&F=>5 가 되겠네요.
즉, 0 은 상대 숫자와 무관하게 결과가 0 이되고, F 는 결과값이 상대숫자가 되겠네요
'정보처리기사' 카테고리의 다른 글
[정처기] 실기 기출 공부 (2022년 2회) (0) | 2023.02.04 |
---|---|
[정처기] 연습문제 - 파이선 문자 다루기 (0) | 2023.01.31 |
[정처기] 기출문제 - 아스키 코드 문제? (0) | 2023.01.27 |
[정처기] 기출문제 - C언어 문제 (0) | 2023.01.27 |
[정처기] 필기 오답 노트 4과목,5과목 (0) | 2023.01.17 |