쌓고 쌓다
진법 변환 방법 + 소수점 포함 (2진수<->8진수<->10진수<->16진수) 본문
10진법을 다른 진법으로 바꿀 때
정수 부분은 바꾸려는 기수로 나누어 나머지를 적고, 소수 부분은 기수로 곱하여 정수가 되는 부분을 적는다.
아래의 예를 통해 이해를 하자.
*기수: 진법을 나타내는 기본수(10이 기수인 수를 10진법, 2가 기수이면 2진법)
10진수 -> 2진수
소수점 왼쪽 부분(정수)은 2로 나눈 나머지를 적고, 소수점 오른쪽 부분(소수)은 2를 곱하여 정수가 되는 수를 적어간다.
예를 들어 75.6875는 75(정수)와 .6875(소수) 두 부분으로 나누어 계산하자.
먼저 정수 부분을 계산해보자.
75를 2로 나누어 나머지를 적어가고 몫을 또 2로 나누어가며 반복하면 된다.
몫이 1또는 0이될때까지 반복한다.
75를 2진수로 바꾸면 1001011이 된다.
이제 소수 부분 0.6875을 2진수로 바꾸어보겠다.
이때 소수 부분에 2를 곱해가며 정수 부분을 기록할 것이고 다시 정수 부분을 0으로 생각하여 반복한다.
이때 소수 부분이 0이 될 때까지 반복한다.
소수 부분을 2진수로 바꾸면 1011이 되는 것이다.
따라서 10진수 75.6875는 2진수로 1001011.1011이 된다.
또 다른 예로 75.6을 2진수로 바꾼다면
정수 부분은 1001011이 나오고 소수 부분은 10011011001100이 반복적으로 나타날 것이다.
즉 10진수를 완벽하게 2진수로 나타낼 수는 없다.
10진수 -> 8진수
75.6875를 8진수로 바꿔보자.
10진수를 2진수로 바꿀 때랑 동일한 방법이니 자세한 설명은 생략.
마찬가지로 10진수를 8진수로 바꿀때 반복되는 소수 부분이 나올 수 있다.
10진수 -> 16진수
똑같은 방법으로 변환한다.
75.6875를 바꿔보자.
여기서 만약 75.6875를 5진수로 바꿨다면 300.32043204...로 소수 부분이 반복될 것이다.
10진수를 바꿀때 어떤 진법에는 정확하게 계산될 수 있고 아닐 수도 있다.
또한 16진수로 바꿀때 소수 부분이 반복될 수 있다.
2진수-8진수-10진수-16진수 상호 변환 방법
2진수를 다른 진수로 변환하는 방법은 간단하다.
2진수 3자리는 8진수가 되고, 4자리는 16진수가 된다.
10진수 75.6875는 2진수로 1001011.1011이였다.
이것을 8진수로 바꿔보자.
소수점을 기준으로 3자리씩 끊어 8진수로 바꾸면 된다.
3자리씩 끊고 모자란 자리의 수는 0으로 채운다.
3자리씩 끊고 그 자리의 수는 아래와 같이 계산한다.
16진수로 바꾸는 방법도 마찬가지이다.
4자리씩 끊어 계산하자.
반대로 8진수, 16진수를 2진수로 바꿀 수 있다.
8진수의 한 자릿수는 2진수 3자리이고,
16진수의 한 자리수는 2진수 4자리인 것을 기억하자.
2진수, 8진수, 16진수를 10진수로 변환하는 방법
도 간단하다.
그냥 각 자리의 수에 현재 진수를 거듭제곱으로 곱하여 계산한다.
아래의 2진수를 10진수로 변환해보겠다.
8진수, 16진수도 10진수로 바꿔보자.
'Git & CS' 카테고리의 다른 글
그레이 코드(Gray Code) (0) | 2022.09.21 |
---|---|
BCD 코드와 3초과 코드 (0) | 2022.09.21 |
메모리 구조(Code, Data, Heap, Stack) (2) | 2022.09.19 |
저급언어 & 고급언어 (0) | 2022.09.07 |
컴파일러 & 인터프리터 (0) | 2022.09.07 |