정보처리기사

[정처기] 연습문제 - C언어 비트연산

멋쟁이천재사자 2023. 1. 31. 00:04

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 는 결과값이 상대숫자가 되겠네요