1.9 2진수와 16진수 [DOC] [SMTS]
1.9.1 2진수
디지털 시스템에서 자료(data)는 모두 2진수로 저장된다. 2진수 시스템은 두수 (0,1)를 갖는 기수 2 시스템이다. 11010.11과 같은 2진수는 1과 0의 열과 2진 소수점으로 표현된다. 2진수와 같은 값을 갖는 10진수는 기수 2를 갖는 거듭제곱 수의 나열로 숫자를 확장해서 찾을 수 있다. 예를 들면 다음과 같다.
비트가 0일 때는 10진수로 변환하는 합에 영향을 미치지 않는다. 그러므로 10진수로의 변환은 비트가 1인 2의 거듭제곱수의 합으로 얻을 수 있다. 예를 들면 다음과 같다.
1.9.2 16진수
16진수를 사용하여 2진수를 더 간결하게 표현하는 것이 길이가 4배 더 긴 2진으로 된 비트열을 사용하는 것보다 훨씬 편리하다. 그러므로 디지털 시스템에서는 2진수를 기술하기 위해 16진수를 많이 사용한다.
16진수는 15까지 한자리로 표현되고 16이 되면 두 자리로 넘어간다. 따라서 10진 시스템에서 가져온 10개의 숫자와 10, 11, 12, 13, 14, 15를 하나의 숫자로 표현하기 위해 사용되는 문자 A, B, C, D, E, F를 갖는 기수 16 시스템이다. 16진수에 대한 예는 다음과 같다.
다음 표에 16진수 0부터 15까지를 2진수와 8진수로 표현한 것을 기술하였다.
[표 1.12.2]
10진수 | 2진수 | 8진수 | 16진수 |
00 | 0000 | 00 | 0 |
01 | 0001 | 01 | 1 |
02 | 0010 | 02 | 2 |
03 | 0011 | 03 | 3 |
04 | 0100 | 04 | 4 |
05 | 0101 | 05 | 5 |
06 | 0110 | 06 | 6 |
07 | 0111 | 07 | 7 |
08 | 1000 | 10 | 8 |
09 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
이중에서 2진수와 16진수와의 관계는 눈여겨 보아야 한다. 2진에서 16진수로의 변환은 2진 숫자를 소수점부터 시작하여 왼쪽과 오른쪽으로 4비트씩 나눔으로서 쉽게 얻어진다.
1.9.3 10진수로의 변환
10진수에서 2진수로 변환하는 편리한 방법은 주어진 10진수를 반복해서 2로 나누어서 그때마다 나머지를 써두고, 그 몫을 다시 2로 나누는 방법을 몫이 0이 될 때까지 반복한 후 아래에서부터 위로 나머지를 읽어가는 방법이다. 예를 들어 10진수 103을 2진수로 변환하면 다음과 같다.
103/2 | =51 +나머지 1 | (LSD) | |
51/2 | =25 +나머지 1 |
| ║ ║ ║ ║ ║ ║ |
25/2 | =12 +나머지 1 | ||
12/2 | = 6 +나머지 0 | ||
6/2 | = 3 +나머지 0 | ||
3/2 | = 1 +나머지 1 | ||
1/2 | = 0 +나머지 1 | (MSD) | ║ |
따라서 (103)10=(1100111)2 가 된다.
이번에는 (0.125)10 처럼 10진수의 소수값을 2진수로 변환시키는 방법을 알아보자. 주어진 소수값에 2를 곱한다음 그 결과값이 1을 넘으면 1을 써두고 1을 넘지 않으면 0을 써둔 다음 그 너머지 소수값에 다시 2를 곱한다. 이것을 소수값이 없어질 때까지 반복한 다음, 써둔 결과를 위에서 부터 읽어 내려간다. 즉,
0.125×2 | =0.25 …정수값 0 | (MSD) | ║ |
0.25×2 | =0.5 … 정수값 0 |
| ║ |
0.5×2 | =1.0 … 정수값 1 | (LSD) | |
따라서 (0.125)10=(0.001)2이다.
10진수에서 8진수 혹은 16진수로의 변환도 8 혹은 16으로 나누고 곱한다는 것만 빼고 위와 동일하게 얻어진다.
1.9.4 보수 (선택 사항)
디지털시스템(digital system)에서는 음수를 표현하기 위해서 2의 보수(2‘s complement)를 사용한다. 1의 보수(1’s complement)는 0과 1을 서로 바꾸어서 얻을 수 있다. 즉 0→1, 1→0으로 변환하는 것이다. 예를 들어서
n개의 자리수를 가진 2진수 N이 주어지면 2의 보수는 N≠0일 때 2n-N이고 N=0일 때 0으로 정의한다. 2의 보수는 1의 보수에 1을 더하여 얻을 수 있다. 예를 들어
또한 2의 보수는 최하위자리 0과 첫 번째 자리 1을 모두 변하지 않게 하고 다른 모든 상위자리 비트에 있는 1을 0으로, 0을 1로 바꾸어 만들 수 있다. 그래서 (1101100)2의 하위 자리수에 있는 2개의 0과 첫번째 1을 그대로 두고 다른 4개의 상위자리의 비트를 0을 1로 1을 0으로 바꾸어서 (0010100)2를 얻을 수 있다. 보수의 보수가 원래의 값을 갖는다는 것도 중요한 사실이다.
앞에서도 밝혔듯이 디지털 시스템에서는 2의 보수로서 음수를 표시한다. 예를 들어 8bit 숫자 체계에서 -10을 얻으려면 +10의 2의 보수를 구하면 된다. 즉 의 2의 보수인 이 -10이 되는 것이다. 이러한 개념은 감산 하드웨어를 간략하게 하는데 매우 유용하다.
[표 1.12.3] 8비트 수의 2의 보수
2진수 | 부호 없는 수 | 부호 있는 수 | 2의 보수 |
0000 0000 | 0 | 0 | - |
0000 0001 | 1 | 1 | - |
0000 0010 | 2 | 2 | - |
0000 0011 | 3 | 3 | - |
⋮ | ⋮ | ⋮ | ⋮ |
0111 1110 | 126 | 126 | - |
0111 1111 | 127 | 127 | - |
1000 0000 | 128 | -128 | 1000 0000 |
1000 0001 | 129 | -127 | 0111 1111 |
1000 0010 | 130 | -126 | 0111 1110 |
⋮ | ⋮ | ⋮ | ⋮ |
1111 1101 | 253 | -3 | 0000 0011 |
1111 1110 | 254 | -2 | 0000 0010 |
1111 1111 | 255 | -1 | 0000 0001 |
1.9.5 디지털 데이터 단위
디지털 시스템에서 모든 데이터는 2진수로 표시된다. 2진수에서 각 자리의 수를 비트(bit)라고 하는데 이것이 디지털 데이터의 최소 단위이다. 2진 신호가 몇 개가 묶였느냐에 따라서 다음과 같이 구분한다.
비트 (bit) : 0/1을 표시하는 최소 데이터 단위
니블 (nibble) : 4 bits
바이트 (byte) : 8 bits
워드 (word) : 2 bytes = 16 bits
더블 워드 (dword) : 2 words = 4 bytes = 32 bits
다음 표에 220 까지의 십진수를 나열하였다. 이 중에서 210까지는 외우는 것이 앞으로 프로그래밍하는데 있어서 여러모로 편리하다.
[표 2.12.1] 2의 거듭제곱
n | 2n | n | 2n |
0 | 1 |
|
|
1 | 2 | 11 | 2,048 |
2 | 4 | 12 | 4,096 |
3 | 8 | 13 | 8,192 |
4 | 16 | 14 | 16,384 |
5 | 32 | 15 | 32,768 |
6 | 64 | 16 | 65,536 |
7 | 128 | 17 | 131,072 |
8 | 256 | 18 | 262,144 |
9 | 512 | 19 | 524,288 |
10 | 1,024 | 20 | 1,048,576 |
또한 8자리 2진수의 최대값은 255, 16자리 2진수의 최대값은 65,535 라는 것도 알아두면 나중에 C언어 변수의 가용 범위를 계산할 때 유용하다.
디지털 데이터의 용량을 표기할 때 물리적인 단위와는 다소 다르다.
킬로(kilo) : 210 = 1,024
메가(mega) : 220 = 1,048,576
기가(giga) : 230 = 1,073,741,824
테라(tera) : 240 = 1,099,511,627,776
예를 들어서
이다.
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
2.5 실수 자료형과 실수 상수 (0) | 2016.03.28 |
---|---|
2.4 정수 자료형과 정수형 숫자 상수 (0) | 2016.03.28 |
1.8 atom 설치 / 첫 프로그램 실행하기 (2) | 2016.03.07 |
1.7 windows에서 mingw 설치하기 (0) | 2016.03.07 |
1.2 C 언어 소개 (0) | 2016.03.04 |