소수점 이진수 변환
일반적인 정수의 이진수 변환은 다음과 같습니다.
- 2로 나누어 몫과 나머지를 구한다
- 몫이 0이 될 때까지 몫을 대상으로 과정 1을 반복한다
- 처음 구한 나머지가 가장 오른쪽에 오도록 나머지를 순서대로 적는다
정수의 이진수 변환의 예시는 다음과 같습니다.
예시) 35
35/2 = 17... 1
17/2 = 8... 1
8/2 = 4... 0
4/2 = 2... 0
2/2 = 1... 0
1/2 = 0... 1
35 = 100011_(2)
이를 나눗셈 검산을 통해 나타내보면 왜 이진수 변환에 2의 나눗셈이 필요한 지 알 수 있습니다.
= 35
= 100011_(2)
= 1*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0
= 2(2(2(2(2(2(0) + 1) + 0) + 0) + 0) + 1) + 1
이처럼 위의 식을 보면 나눗셈 검산을 통해서 자릿수 변환을 할 수 있음 확인할 수 있습니다.
또 이진수로 수를 표기하면 8진법과 16진법으로 변환하는 것이 매우 쉽습니다.
= 35
= 100011_(2)
= 100 011 = 043_(8) 8=2^3 이므로 3비트씩
= 0010 0011 = 0x23_(16) 16=2^4 이므로 4비트씩
그러나 소수점 아래의 숫자의 경우 방법이 조금 다릅니다.
이는 소수점을 기준으로 소수점 위의 자릿수는 0 또는 양의 정수의 제곱이지만,
소수점 아래의 자릿수는 이의 반대인 음의 정수의 제곱이기 때문입니다.
따라서 2로 나누는 것이 아닌 반대로 2를 곱해야 함을 유추할 수 있습니다.
소수점 아래 숫자의 이진수 변환은 다음과 같습니다.
- 2를 곱하여 정수 부분과 소수 부분을 구한다
- 소수 부분이 0이 될 때까지 소수 부분을 대상으로 과정 1을 반복한다
- 처음 구한 정수 부분이 가장 왼쪽에 오도록 정수 부분을 순서대로 적는다
일반적인 정수 변환 과정에서 "몫"이 "소수 부분"으로 "나머지"가 "정수 부분"으로 바뀐 것을 알 수 있습니다.
또 처음 구한 것이 가장 "오른쪽"이 아니라 가장 "왼쪽"에 오도록 순서 또한 바뀐 것을 알 수 있습니다.
이는 양의 제곱이 아닌 음의 제곱으로 자릿수를 표현함으로 반대가 된 것입니다.
소수점 아래 숫자의 이진수 변환의 예시는 다음과 같습니다.
예시) 0.8125
0.8125*2 = 1.625 = 0.625 + 1
0.625 *2 = 1.25 = 0.25 + 1
0.25*2 = 0.5 = 0.5 + 0
0.5*2 = 1.0 = 0.0 + 1
0.8125_(10) = 0.1101_(2)
= 0.8125
= .01101_(2)
= 1*2^(-1) + 1*2^(-2) + 0*2^(-3) + 1*2^(-4)
= 0.5(0.5(0.5(0.5(0.5(0)+1)+0)+1) +1)
2의 보수 변환
2의 보수는 컴퓨터 분야에서의 대표적인 음수 표현법 중 하나입니다.
2의 보수와 원래 수를 더하면 모든 비트가 0이 되기 때문에 컴퓨터가 계산하기에 편리하기 때문입니다.
2의 보수를 얻는 방법은 다음과 같습니다.
- 2의 보수 = 1의 보수 + 1
예시) 3의 2의 보수
3 = 0000 0011
3의 1의 보수 = 1111 1100 (0을 1로, 1을 0으로 뒤집기)
3의 2의 보수 = 1111 1101 - 2^n - n비트 수
예시) 3의 2의 보수
3 = 0000 0011
2^8 = 1 0000 0000 = 1111 1111 + 0000 0001 (사실 1의 보수에 1 더하는 것과 같습니다.)
2^8 - 3 = 1111 1101
참조
'개발 > 알고리즘' 카테고리의 다른 글
백준 14503 : 로봇 청소기 (Gold 5) (0) | 2022.10.22 |
---|---|
백준 14501 : 퇴사 (실버3) - 완탐, DP(재귀), DP(반복) (0) | 2022.10.22 |
백준 13460 : 구슬 탈출 2 (Gold 1) (0) | 2022.10.22 |
네이버 AI Rush 서류 통과 및 코테 후기 (0) | 2022.10.21 |
댓글