튜기's blogggg

데이터 표현 방식의 이해

by St1tch

출처 Luuzun IT Security | luuzun
원문 http://luuzun.blog.me/50189443217

    1. 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 : 비트 연산자]


블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기