반응형
중간고사가 끝나고 학교 과제가 나오기 시작했다...
문제는 다음과 같다.
-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
반응형
'C언어' 카테고리의 다른 글
[C언어] Set (정렬 기반 중복 제거 알고리즘) (0) | 2024.11.15 |
---|---|
[C언어] Anagram (문자열 해싱 기반 탐색 알고리즘) (0) | 2024.11.13 |
[C언어] Sudoku Validator (부루트포스 탐색 알고리즘) (0) | 2024.11.13 |
[C언어]Word Search (부루트 포스 탐색 알고리즘) (0) | 2024.11.12 |
[백준][C] 2738번: 행렬 덧셈 (0) | 2024.06.23 |