데이터 표현 방식의 이해
by St1tch1. 2진수, 8진수, 10진수, 16진수
2진수는 0,1 이라는 두 개의 기호로 데이터를 표현한다.
8진수는 0~7 까지의 8개의 기호를 이용해 데이터를 표현하고,
10진수는 0~9 까지 10개의 기호를 이용해 데이터를 표현하며,
16진수는 0~10, A, B, C, D, E 총 16개의 기호로 데이터를 표현한다.
10진수 | 2진수 | 8진수 | 16진수 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 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 |
16 | 10000 | 20 | 10 |
17 | 10001 | 21 | 11 |
▲ [표 2-1 : 자릿수가 증가하는 시점을 관찰 해 보자]
2. 데이터의 표현 단위 (Bit와 Byte)
'비트'란 컴퓨터가 표현하는 데이터의 최소 단위로서 2진수 값 하나를 저장할 수 있는 메모리의 크기를 뜻한다.
'바이트'란 8개의 비트를 묶은 단위이다.
1비트 | |||||||||||||||
0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1바이트 | |||||||||||||||
0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
2바이트 | |||||||||||||||
0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
▲ [그림 02-1 : 데이터의 표현 단위]
위 그림은 컴퓨터의 메모리를 표현한 그림이다. 0과 1을 표현하는 각각의 작은 사각형이 1비트를 의미한다.
3. 정수의 표현 방식
▶양의 정수의 표현 방식
컴퓨터는 보통 하나의 정수를 4바이트(32비트)로 표현한다. C언어의 자료형인 int또한 4바이트이다.
4바이트로 표시할 수 있는 최대 정수는 2,147,483,647이다.
32 bit | 24 bit | 16 bit | 8 bit | ||||||||||||||||||||||||||||
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
▲ [그림 02-2 : 2,147,483,647 의 2진수 표현]
32비트를 모두 1로 채우면 4,294,967,295가 되어야 하지만, 첫 번째 비트는 양수라면 0, 음수라면 1을 저장하여 부호를 표시한다. 이를 MSB (Most Significant Bit) 라고 한다.
▶음의 정수의 표현 방식
다음 그림이 나타내는 숫자는 얼마일지 생각해 보자.
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
▲ [그림 02-3 : -1의 2진수 표현]
-2,147,483,647로 생각하기 쉽지만, 실제로 이 숫자는 -1이다. 왜 이런 결과가 나왔는지 알아보자.
양의 정수를 음의 정수로 바꾸는 과정을 2의 보수법이라 한다. 0은 1로, 1은 0으로 바꾼 뒤, 1을 더하는 것이다.
다음 그림은 1을 32비트 2진수로 표현한 것이다.
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
▲ [그림 02-3 : 1의 2진수 표현]
여기에 2의 보수법을 이용한 계산을 해 보면, 그림 02-3과 동일한 결과가 나온다. 이러한 2의 보수법을 사용해 음수를 표현하는 이유는 덧셈연산 때문이다. 같은 크기의 음수와 양수가 더해졌을 때 0이 나오게 하기 위해 이런 방법을 사용한다.
실제로 계산 해 보자.
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
▲ [그림 02-4 : 2,147,483,647과 -2,147,483,647의 덧셈]
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
▲ [그림 02-5 : 2,147,483,647과 -2,147,483,647의 덧셈 결과]
33비트 위치가 1이되고 나머지는 모두 0이 된다. 4바이트 크기에서 는 33번째 비트를 표시할 수 없으므로 1이 버려지고, 0이 된다.
4. 실수의 표현 방식
실수를 표현할 때 가장 쉽게 생각할 수 있는 방법은 절반은 소수점 이상을, 나머지는 소수점 이하를 표현하는 방법이다. 하지만 이런 방법을 사용하면 표현할 수 있는 실수의 범위가 너무 좁다. 이러한 문제점을 해결하기 위해 사용하는 것이 부동 소수점 방식이다.
부호 | e | m | |||||||||||||
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
▲ [그림 02-6 : 부동 소수점 방식으로 표현한 실수]
±(1.m)ⅹ2e-127
위의 식에는 변수 m과 변수 e가 존재한다. 이런 식을 사용하면 보다 넓은 범위의 실수를 표현할 수 있다.
이러한 부동 소수점 방식에는 오차가 존재한다.
5. 비트 연산자
비트 연산자란 비트단위로 연산을 하는 연산자들을 말한다. 그 종류와 연산 방법은 다음과 같다.
연산자 | 연산자의 기능 | 사용 방법 | 연산의 예 |
& | 비트 단위로 AND 연산을 한다. | a & b | 01111 10100 |
00100 | |||
| | 비트 단위로 OR 연산을 한다. | a | b | 01111 10100 |
11111 | |||
^ | 비트 단위로 XOR 연산을 한다. | a ^ b | 01111 10100 |
11011 | |||
~ | 모든 비트를 반전시킨다. | ~a | 01111 |
10000 | |||
<< | 비트 열을 왼쪽으로 이동시킨다. | a<<2 | 001100 |
110000 | |||
>> | 비트 열을 오른쪽으로 이동시킨다. | a>>2 | 001100 |
000011 |
▲ [그림 02-2 : 비트 연산자]
[출처] [공유] 리버싱 2강 - 데이터 표현 방식의 이해|작성자 튜기
블로그의 정보
튜기's blogg(st1tch)
St1tch