본문 바로가기
C언어

[C]10진수를 2진수 1byte크기에서 표현하기

by CromArchive 2024. 6. 23.
반응형

중간고사가 끝나고 학교 과제가 나오기 시작했다...

문제는 다음과 같다.

-128부터 127까지의 수(8비트 범위) 정수 하나를 입력하면 8비트 이진수로 출력하는 프로그램을 작성하여라. 단 배열을 사용하면 안된다.

 

코드는 위와 같다.
먼저, 8비트의 각 비트부분에 해당하는 변수들을 선언해주었다.
rm은 나머지(remain)의 의미로 1~8까지의 위치이다.
md는 나머지 연산의 (mod)의 의미이다. 이것도 역시 1~8까지 번호를 부여해주었다.

10진수를 2진수로 바꾸는 방법은 아래와 같다.

 

2로 계속 나눠주면서 나머지를 적고

 

더이상 나눌 수 없을 때까지 반복한 후,

 

밑에서부터 거꾸로 읽어주면 된다.

 

예시처럼 100이라면 1100100이 되고

 

8비트에서라면 0110 0100이 된다.

 

 

이 부분이 10진수를 2진수로 바꾸는 부분을 표현한 것이다.
in 변수로 10진수를 받은 후에, 2로 나눈 나머지는 rm에 몫은 md에 저장해준다.

 

그런데 입력이 음수라면 어떻게 표현해야 할까?

답은 보수 표현법에 있다.
2진수에서 두 수를 더해서 0이 되는 수의 관계를 보수관계 라고 한다.
보수를 구하는 방법은 쉬운데,
각 자리 수를 0이면 1로 1이면 0으로 반전시켜준 후에 1을 더해주면 된다.
코드에서는 8비트에서 보수를 더했을 시에 1 0000 0000 == 256이고 8비트이기 때문에 맨 앞의 1은 Overflow로 0000 0000이 된다는 아이디어를 사용했다.
따라서 조건문으로 입력값 in이 음수라면, in = 256+in; 을 해주어서 음수 값을 표현하도록 해주었다.

 

코드를 실행해보자!!

100을 입력하는 경우

 

127을 입력하는 경우

 

-127을 입력하는 경우

 

 

728x90
반응형