공머씨의 블로그
내가 공부한 논리회로 3. Number system 2(수 체계-conversion between Number) 본문
내가 공부한 논리회로 3. Number system 2(수 체계-conversion between Number)
공머씨 2020. 3. 18. 21:11conversion between Number
저번 시간에 푼 10진법으로 변환하는 것부터
디지털 시스템은 0,1밖에 없기 때문에 논리가 2개밖에 없기 때문에 컴퓨터 입장에서는 매우 편리합니다.
2진수, 8진수, 16진수를 10진수로 변환하는 것은 전 시간에 공부한 것이고

파란색 화살표가 저번 포스팅에서 한 것입니다. 어떤 진수든 10진수로 바꾸려면 R진법 공식을 사용하면 됩니다.
이번에는
2,8,16진수간의 상호변환에 대해서 공부해보겠습니다.

순서는 아래그림에 나타내었습니다.

Bit Grouping 는 2진수를 8진수, 16진수로 바꿀 때 사용하는 변환법입니다.
10100은 몇비트일까요?? 5비트입니다. 이와 같이 이진수를 이루는 숫자 하나하나를 bit라고 한다는 것을 공부해서 알고 있습니다.
2진수를 8진수로 바꾸려면 3비트씩 Grouping
2진수를 16진수로 바꾸려면 4비트씩 Grouping 합니다.
그래서 bit Grouping라고 하는것입니다.
Grouping은 그룹을 짓는다는 거라고 생각하면 됩니다.
Ungrouping라는 것은 gouping에 접두사 Un 이 붙었습니다.
그룹을 짓는 것을 반대로 즉 해체(?)를 한다고 생각하시면 됩니다. 무엇인지는 아래 설명을 보고 이해를 해보시면 되겠습니다.
4. 2진수를 8진수로 변환하려면
- 8진수는 0부터 7까지 8개의 숫자로 이루어져 있습니다.
- 또 2의 3승인 8을 이진수로 바꾸면 자릿수가 1000인 4개로 바뀌게 됩니다.
- 0부터 7까지의 이진수는 자릿수가 1개에서 3개입니다.
- 2진수에서 3bit씩 묶으면 무조건 0에서 7 사이의 숫자가 나오게 되죠...
- 그래서 2진수를 8진수로 변환할 때 3자리씩 숫자를 묶는 것입니다. >>이것을 Bit Grouping이라고 합니다.
- ?! Bit =Binary digit의 약자입니다.
0에서 7까지 이진수를 외우고 있으면 숙지하고 있으면 2진수를 8진수로 변환하기 편할 것입니다.
사실 규칙만 알고 있으면 외울 필요는 없는데 많이 연습을 하면 외워지고 실수도 적어지죠.
규칙은 저번 포스팅에서 이야기하였듯이 2진수는 2의 승수에서 자릿수가 바뀐다는 것입니다.
10진수는 10의 승수 10 100 1000에서 자릿수가 바뀌죠.>> 예시를 10진수로 들면 굉장히 당연한 것처럼 보입니다.
8진수를 예로 들어보면,
8진수는 8의 승수 십진수로 8 64 512에서 자릿수가 바뀔 것입니다.
(내공 논 2의 2-4번에 있는 표를 보고 확인해보시면 알 수 있습니다.)
2진수로 구성된 숫자를 8진수로 바꾸기 위해 3개씩 묶었는데
아래 사진과 같이 맨 왼쪽에? 10????? 두 자릿수인데???? 어떻게 하죠?????

01이나 1이나 같잖아요????'
10이나 010이나 같은 숫자입니다.
앞에 0이 있다고 생각하고 아래와 같이 묶어 주면 됩니다.
소수점이 있을 때는 소수점에 가장 가까운 숫자부터 시작해서 3bit씩 묶으면 됩니다.


읽기 쉽게 하기 위해 위와 같이 번호를 붙여주었습니다.
하나씩 살펴보도록 하겠습니다.
1번으로 표기된 이진수는 010입니다.
이진수로 010(=10)이 10진수로 무엇일까요??
많이 하면 외워지겠지만 그렇지 않은 상황이라면 직접 바꾸어 보면 됩니다.
아래와 같이 '자릿수 규칙'을 생각해서 바꾸어도 되고
- 일단 10이라는 것은 자릿수가 바뀌자마자의 숫자이니까 2의 승수일 것이고
- n승수에서 자릿수가 n+1 바뀌니까
- 음,,,,,,10은 자릿수가 2개이고 그러면 2의 1승이겠구나! 아 이진수로 10은 십진수로 2구나!!!
아래와 같이 작은 숫자는 직접 써보면서 해도 큰 어려움이 없습니다.

10진수 2를 8진수로>>2 (쉽게 알 수 있습니다.)
1번의 010>>2
1번>2
2번으로 표기된 숫자는 110입니다.
헷갈리면 안 됩니다.
1
10
100
모두 다른 숫자입니다.
110 다음의 숫자는 111입니다. 111 다음에는 1000으로 자릿수가 바뀝니다.
1000은 네 자리 숫자이니까 2진수로 1000이 2의 (자릿수-1) 승= 2의 3승 즉, 8이라는 것을 알 수 있습니다.
자릿수가 바뀌기 전의 숫자는 모두 1로 구성되어있다는 것은 자명한 사실입니다.
또 쉽게 이해가 가도록 10진수를 예시로 들어보면 100,1000,10000으로 자릿수가 바뀌기 전에 모두 9로 이루어진 것을 생각해보면 됩니다.
본론?으로 돌아가서 111은 곧 7이라는 의미이니까 111 이전의 수인 110은 6이라는 것입니다.
십진수 6은 8진수 6입니다.
글을 쓰면서 생각해보았는데 사실 2진수를 8진수로 바꿀 때 중간에
2진수>>10진수>>8진수에서
10진수로 바꾼다고 생각 안 해도 될 것 같습니다. 어차피 8진수는 0~7까지의 숫자로 이루어진 수체계이고
10진수에서 0~7이 8진수에서도 똑 같이 0~7이기 때문입니다.
이와 반대로 2진수를 16진수로 바꿀 때는 2진수>>10진수>>16진수 이렇게 중간에 10진수에서 16진수로 바꾸는 과정이 필요합니다. 왜 그런지는 바로 윗줄의 설명을 반대로 생각해보면 쉽게 알 수 있습니다.
2번>6
3번으로 표기된 이진수는 001
001=1
이를 8진수로 바꾸면 당연히 1이 됩니다.
3번>1
4번으로 표기된 이진수는 101
101에서
십의 자리 일의 자리를 보겠습니다.
101을 보는 순간 111이 되려면 몇 칸 더 가야 하는지를 생각하면 되겠습니다.
101
110
111
이렇게 써놓고 111은 7이라는 것을 바로 알 수 있습니다.
7-2=5 >>> 101은 십진수로는 5가 됩니다.
4번>5
5번으로 표기된 이진수는 111
111>> 이렇게 모든 자릿수가 1로 채워지면 다음 숫자에서는 자릿수가 바뀐다고 했습니다.(99 다음 100으로 999 다음 1000으로 자릿수가 바뀌는 것을 생각)
111을 보면 다음 숫자가 1000이라는 것이 연속적으로 떠올려야 합니다.
1000은 자릿수가 4개이니까 2의(자릿수-1) 승 일 것입니다. ('자릿수 공식 참고')
즉 1000은 십진수로는 8이 됩니다.
111은 당연히 7이 됩니다.
5번>7
6번으로 표기된 이진수는 101
4번과 같은 숫자이므로
6번>5
Bit grouping 을거쳐서 이진수에서 8진수로 바뀐 숫자들은
아래 그림과 같이 순서대로 나열해주면 됩니다.

8진수로 2615.75 가 됩니다.
tip: 001, 000, 111과 같이 보자마자 바로 어떤 수인지 알 수 있는 수들을
먼저 작성해준 뒤 그것을 기준으로 다른 수들을 계산하면 이중으로 계산할 필요 없이 빨리 끝날 것입니다.
5. 2진수를 16진수로 변환하려면
Bit Grouping 하는 방법을 사용하는데 이번에는 4bit씩 묶어줍니다.
4비트씩 묶는 이유는
- 16진수는 0부터 F까지 16가지의 경우의 수가 있고
- 16가지의 경우의 수를 이진수로 표현하는데 필요한 최대 비트가 4bit이고
- 2의 4승 16이라서 0000부터 1111까지 16개의 경우의 수를 표현할 수 있는데 16진수에서 일의 자릿수까지 경우의 수는 0부터 F까지 16개 이므로 일대일 대응이 된다.
또 16진수의 경우에는 10진수(한 자리에 0~9까지 표현 가능)보다 경우의 수가 많기 때문에
중간에 10진수로 변환하는 과정이 꼭 필요합니다.(10,11,12,13,14,15의 경우에 특히)
그리고 변환한 10진수를 다시 16진수로 바꾸어 주면 됩니다
아래의 기준이 되는 숫자들은 확실하게 암기해두는 것이 좋습니다.
2진수 0000은 16진수에서 0이고
2진수 1001은 16진수에서 9이다.
2진수 1111은 F이다.
F다음의 16진수 숫자는 자릿수가 올라가기 때문에 10입니다.
아래와 같이 4bit씩 grouping 해주면 됩니다.

이번에도 설명과 이해에 편리하도록
각 group에 숫자를 부여했습니다.

첫 번째 숫자는 0110입니다.
번호 3번이 부여된 숫자는 소수점 왼쪽 자리에 있기 때문에 맨 1의 앞에 있는 0은 의미가 없습니다.
이전에도 계속 설명했다시피 0001.1이나 1.1 이나 같은 숫자이기 때문입니다.
소수점 왼쪽 자리인지 오른쪽 자리인지를 염두에 두고 계산하는 습관을 가져야 하겠습니다.
그래서 110을 계산해보면
110 다음에 111로 모든 자리가 채워질 거라는 것을 바로 알 수 있습니다. 이진수 111은 10진수로 7입니다.
그러면 110 은 십진수로 6, 16진수로도 6이라는 것을 쉽게 알 수 있습니다.
16진수로 6
2번째 숫자는 1110입니다.
1111이라는 것을 위에서 말했다시피 외워두셨다면
1110은 십진수로 14 16진수로 E라는 것을 금방 알 수 있습니다.
P.S 대학교에서는 D학점 다음에 F학점이라 그런지
자꾸 D다음에 E라고 생각하게 되는데 저처럼 실수하는 분 들도 주의하시기 바랍니다.
16진수로 E
3번째 숫자는 1010입니다.
1010은 10이라는 것은 외우기 쉬우니까 외워두시면 될 것 같습니다.
10진수에서 10은 16진수에서 A로 나타냅니다.
16진수로 A
4번째 숫자는 0110입니다.
111이 7이라는 것을 외워두었으므로
110은 111전의 숫자이므로 십진수로 6, 16진수로도 6이라는 것을 알 수 있습니다.
16진수로 6
순서대로 나열하면 아래 그림과 같습니다.
따라서 문제에서 제시한 2진수는 16진수로 ()가 됩니다.
Q. 위에서 공부한 4bit groupig으로 직접 해보시기 바랍니다. (정답은 아래 내리다 보면 나옵니다.)

(유한 엔터)
96B.F5
6. 8진수와 16진수를 2진수로 변환하기
Ungrouping 하면 된다. (3개, 4개씩 묶는 게 아니라 나누어서 계산한다.)
나눈다>>초등학교 1학년 때 배운 가르기를 생각하면 되겠습니다.
이미 합쳐져 있는 것 하나의 그룹을 이루고 있는 것을 여러 개로 나눕니다.????
그룹 짓는다랑 어떻게 다른 의미인지 직접 해보면서 느끼시길 바랍니다.
Grouping가 3개의 숫자를 하나의 숫자로 (2진법>8진법)
4개의 숫자를 하나의 숫자로 (2진법>16진법)이었다면
Ungrouping 은 하나의 숫자를 3개의 비트(8진수를 2진수로), 하나의 숫자를 4개의 비트(16진수를 2진수)로 나타내는 것이라고 생각하면 되겠습니다.
3Bit , 4Bit로 나타내는 이유는 위에서 Bitgrouping 할 때와 같은 이유입니다.
Ungrouping의 의미를 잘 새긴 뒤 아래의 진법 변환을 해보겠습니다.
6-1. 일단 8진수를 2진수로 변환하는 것부터 알아보겠습니다.
2진수를 8진수로 변환하는 것의 역과정입니다.
2진수를 8진수로 변환할 때 bit3개씩 grouping 하여 (10진수로 나타낸뒤-10진수에서 0~7이 곧 8진수에서 0~7이므로 중간에 10진수로 나타낸다는 표현은 굳이 안 해도 된다.) 8진수의 숫자 하나로 나타냈습니다.
8진수를 2진수로 변환하려면 하나의 숫자를 3개의 bit로 나타내 주면 됩니다.
아주 간단합니다.
하나의 문제를 같이 풀어보겠습니다.

설명과 이해가 편리하도록 위와 같은 8진수에 빨간색 숫자를 붙여주었습니다.
첫 번째 숫자는 8진수 2입니다.
10진수로도 2인 숫자입니다. 2진수와 8진수 변환은 서로 역과정 이기떄문에 중간에 10진수로 바꾸어 주지 않아도 됩니다.
2를 2진수로는 10입니다. 그런데 3개의 비트로 표현해주어야 하므로
010이라고 표현합니다.
2진수로 010
두 번째 숫자는 8진수 3입니다.
10진수로도 3인 숫자입니다.
3을 2진수로 표현하면 11입니다.
3개의 비트로 표현하면 011입니다.
2진수로 011
세 번째 숫자는 8진수 4입니다.
8진수 4는 십진수로도 4입니다.
4는 이진수로 100입니다. 2의 승수라서 자릿수가 바뀌었습니다.
2진수로 100
네 번째 숫자는 8진수 5입니다.
5를 이진수로 표현하면 101입니다.
4가 이진수로 100 (4는 2의 승수이므로 자릿수가 바뀐다.) 임을 떠올리면
5가 이진수로 101이라는 것을 금방 떠올릴 수 있습니다.
2진수로 100
다섯 번째 숫자는 8진수 6입니다.
전 과정에서 5가 이진수로 101이었습니다.
6은 110입니다. (7이 111 임을 생각해서 6,5를 동시에 이진수로 생각할 수 있을 정도로 되면 편리하게 변환을 할 수가 있습니다. 반복 연습해서 숙지 해두길 바랍니다.)
십의 자리 일의 자리가 01 이어서
01에서 자릿수가 하나 올라가서 10 이 되었습니다.
2진수로 110
이들을 다 조합해보면 다음과 같습니다.

6-2. 다음으로 16진수를 2진수로 변환하는 방법을 알아보겠습니다.
8진수를 2진수를 바꾼 것과 같이 Ungrouping 해주면 됩니다.
다음과 같은 16진수로 구성된 숫자가 있습니다.

8진수에서는 숫자 하나를 3개의 bit로 나타내는 Ungrouping을 했다면
16진수에서는 하나의 숫자를 4개의 bit로 나타내는 Ungrouping를 하면 됩니다.
차근차근 살펴보겠습니다.
첫 번째 숫자는 16진수 3입니다.
3을 이진수로 나타내면 11인데
그냥 11이 아니라 4Bit로 나타내 주어야 합니다.
2진수로 0011
두 번째 숫자는 16진수 A입니다.
A는 10진수로 10이죠.
10을 이진수로 나타내면 1010입니다.
- 1000 십진수 8
- 1001 십진수 9
- 1010 십진수 10
- 아까 위에서 이진수 1010은 십진수로 10이라는 거는 외우기 쉬우니까 외워두라고 했습니다.
그래서 16진수 A는 이진수로 1010이 되는 것입니다.
2진수로 1010
세 번째 숫자는 16진수 6입니다.
16진수로 6이면 10진수로도 6입니다.
4를 기준로 생각해보면
100, 101 ,110
순서대로 4, 5, 6입니다.
16진수 6은 이진수로 110입니다.
여기서도 주의해야 합니다.
2진수를 16진수로 나타낼 때 (Ungrouping) 4Bit씩 표현해주어야 합니다.
110이나 0110이나 같은 수입니다. (소수점 왼쪽이라면 천의 자리에 있는 0은 의미가 없게 되므로)
만약 소수점 오른쪽에 있는 110이라면
1100이라고 작성해주어야 합니다. (소수점 오른쪽이라면 일의 자리에 있는 0은 의미가 없게 되므로)
여기서는 소수점 왼쪽자리이믈 0110이라고 나타내면 됩니다.
2진수로 0110
네 번째 숫자는 16진수 C입니다.
기준이 되는 수
16진수 A=10진수 10=2진수 1010
16진수 F=10진수 15= 2진수 1110
임을 외워두었다면 빨리 계산 이 될 것입니다.
A보다 2 큰 수라고 생각해서 계산해도 되고
F보다 3 작은 수라고 생각해서 계산해도 됩니다.
저는 전자의 방법을 택하겠습니다.
1010 1011 1100
순서대로 A, B, C이므로
16진수 C는 이진수로 1100입니다.
2진수로 1100
- 위의 변환 과정들을 아래 그림과 같이 순차적으로 나타낸뒤
- MSB에서는 앞의 0들을 LSB에서는 뒤의 0들을 없애주면 됩니다. (의미 없는 0들)
- 0.1이나 0.10이나 같은 것처럼 소수점 오른쪽 숫자들은 맨 오른쪽의 0들이 의미가 없습니다.
- 그리고 첫 번째 그림처럼 띄어 쓰면 안 되고
- 두 번째 그림처럼 붙여서 써야 합니다.
- 아래 첨자에 2진수 임을 나타내는 2도 꼭 표시해주시기 바랍니다.
변환이 끝납니다.


소수점에 주의해서 나타내면 됩니다.
8진수를 16진수로, 16진수를 8진수로 변환하는 과정은 다음 포스팅에서 다루겠습니다.
도움이 되셨다면 로그인이 필요없는 하트버튼 한번 부탁드립니다!!
'내가 공부한 3학기 전공 > 내가 공부한 논리회로 설계' 카테고리의 다른 글
| 내가 공부한 논리회로 5. Number system 3(수 체계-conversion between Number) (1) | 2020.03.27 |
|---|---|
| 내가 공부한 논리회로 4. Number system 2(수 체계-conversion between Number) (0) | 2020.03.27 |
| 내가 공부한 논리회로 2. Number system 1(수 체계) (3) | 2020.03.18 |
| 내가 공부한 논리회로 1.Overview of Digital System (0) | 2020.03.18 |
| 내가 공부한 논리회로0.-과목소개 (0) | 2020.03.18 |