[컴퓨터구조] 데이터의 표현

필기맨·2022년 4월 15일
0

컴퓨터구조

목록 보기
2/3

진법

  • 컴퓨터에서는 전기 신호 ON/OFF 의 상태만 감지할 수 있어 2진법을 주로 사용한다.
  • 허나, 2진법만 사용하다보면 자리 수가 길어지는 경우가 있기 때문에 8, 16진법도 사용한다.
진법설명
2진법0과 1 2가지 기호로 표현하는 수 체계
8진법0~7의 8가지 기호로 표현하는 수 체계
16진법0~F의 16가지 기호로 표현하는 수 체계
  • 예시
10진법2진법8진법16진법
0000
1111
21022
81000108
10101012A
171 00012111
99110 001114363

보수 (Complement)

  • 컴퓨터에서 양수를 음수로 변환시킬 때, 보수를 사용한다. (뺄셈 연산을 보수 처리 후, 덧셈 연산으로 한다.)

  • 1진 보수: 해당 bit에서 가장 큰 표현값을 형성하는데 서로 보완 관계가 있는 두 수의 관계를 1진 보수 관계라고 한다.
  • 2진 보수: 최대 표현 자리 수를 형성하는데 서로 보완 관계가 있는 두 수의 관계를 2진 보수 관계라고 한다.
    • 1진 보수: A+B=9 일 때, (0, 8), (1, 7).. 등등이 1진 보수 관계
    • 2진 보수: A+B=10 일 때, (0, 10), (1, 9).. 등등이 2진 보수 관계

보수 개념을 2진법에 적용시켜보자.

    • 1진 보수: A+B=1 일 때, (0, 1), (1, 0)
    • 2진 보수: A+B=10 일 때, (1, 1), (0, 10), (10, 0)
  • 2진법1진 보수의 경우 각 비트를 뒤집어주면 된다.
  • 2진법2진 보수의 경우 1진 보수에 +1를 해주면 된다.

정수형 표현

2진법 정수형 표현

  • 2진법 정수형 수를 표현하는 방법을 알아보자.
sdd...dd
  • s 비트가 0일 때 양수, 1일 때 음수를 갖는다.
  • 이렇게 되면 0의 값이 +0, -0으로 2가지 표현이 가능해지고, n개의 비트를 사용했을 때, 표현 범위는 -(2^(n-1)-1) ~ +(2^(n-1)-1)가 된다.

이 때, 2진 보수의 개념을 이용하면 0이 2가지 방법으로 표현되는 것을 해결할 수 있다.

4개 비트를 사용한다고 하자.

0001 + x = 0000 을 만족하는 x, 즉 -1을 구하고자 할 때, 2진 보수를 활용하면 된다.

2진 보수를 구하기 위해선 1진 보수를 구하고 +1 해주면 되므로 1진 보수를 먼저 구해보자.

1진 보수는 모든 비트 값을 뒤집어주면 되므로 1110가 된다.

따라서 00012진 보수 x1111가 되고, 이것이 -1이다.

위와 같이 음수를 표현해주면 앞서 말한 0이 2가지 방법으로 표현되는 것을 해결할 수 있다.

더불어 수의 표현 범위는 -(2^(n-1)) ~ +(2^(n-1)-1)가 된다.


10진법 정수형 표현

  • 때때로, 2진법 정수형 데이터를 일일히 10진법으로 변환하는 작업이 번거로워서 10진법 정수형 형태로 저장하는 경우도 있다.

Unpacked decimal

  • 연산이 불가능하고 입출력에만 활용되는 표현 방식. (비수치 데이터)
  • 표현 방식은 아래와 같다.

1 바이트로 10진법 하나 자릿수만 표현한다.

따라서, 비트는 아래처럼 형성된다.

F DF D...F DF DS D

(F: 1111, D: 11XX, S: 1100(+), 1101(-))

1 바이트로 10진법의 한자리 수를 표현하니 비트가 남는다. 따라서 F로 마지막 바이트를 제외하고 모든 바이트의 앞 비트로 채워준다.

D 비트로 수를 표현하는데, 이 또한 10까지 표현하는데 2개의 비트만 사용하면 되므로 D 비트는 11XX 형태가 될 것이다.

S 비트는 부호를 표현하는 비트다.


Packed decimal

  • 연산이 가능하지만, 입출력은 불가능한 방식. (수치 데이터)
  • 표현 방식은 아래와 같다.

1 바이트에 10진법 두 자리수를 표현한다. (BCD code 이용, BCD 코드는 밑에서 다룰 예정!)

D DD D...D DD DD S

(D: 11XX, S: 1100(+), 1101(-))


실수형 표현

  • 실수형 표현엔 부동 소수점(Floating-point) 방법을 사용한다.
  • 지수 연산을 사용하여 표현 범위를 크게 할 수 있다는 장점이 있다.

32비트 실수형의 경우

313029...232221...0
see...emm...m
  • 31번째 비트: 부호 비트 (0: +, 1: -)
  • 30~23번째 비트(8개): 지수
  • 22~0번째 비트(23개): 가수

64비트 실수형의 경우

636261...525150...0
see...emm...m
  • 63번째 비트: 부호 비트 (0: +, 1: -)
  • 62~52번째 비트(11개): 지수
  • 51~0번째 비트(52개): 가수

예를 들어 알아보자.

10진수 5.625를 실수형으로 표현해보자.

먼저, 2진수 고정 소수점 표현 방식으로 바꿔보면 101.101이 된다. 그 과정을 살펴보자.

정수부는 101이 되는 건 생략하고, 소수점을 이진수로 표현할 때는 *2연산을 했을 때, 정수부가 1이 되면 1을, 아니면 0을 채워나가면 된다.

  1. 0.625 * 2 = 1.25 => 1
  2. (1.25 - 1) * 2 = 0.5 => 0
  3. 0.5 * 2 = 1.0 => 1

1012진수의 실수부가 된다.

이제 고정 소수점 표현 방식의 2진수101.101을 지수형으로 바꿔주면 1.01101 * 2^2가 된다.

가수부는 1.01101에서 소수점 앞 1은 당연한거기 때문에 저장을 안하고 소수점 뒤의 01101 부분만 저장한다.

이제 지수부 2를 저장해야하는데, 지수부도 양/음 값을 판별해줘야 한다. (10진수 값이 1보다 작다면 음의 값을 갖기 때문)

이 때, 32비트 실수형이면 8비트로 지수부를 표현하고, 음/양을 구별하기 위해 바이어스값 127(2^7 - 1)을 더해준다. (만약 64비트 실수형이라면 11비트로 지수부를 포현하고 이 때 바이어스값은 1023이 된다.)

즉, 지수부 8비트가 127이면 0, 128이면 1을 뜻하게 된다. 따라서 위 예에서는 지수부가 2이기 떄문에 129, 1000 0001가 된다.

정리하면 10진수 101.1010 | 1000 0001 | 011 0100 0000 0000 0000 0000이 된다.

부호지수부가수부
01000 0001011 0100 0000 0000 0000 0000

디지털 코드

BCD 코드 (Binary coded decimal code, 2진화 10진 코드)

10진수BCD 코드10진수BCD 코드
00000100001 0000
10001110001 0001
20010120001 0010
30011130001 0011
40100140001 0100
50101150001 0101
60110160001 0110
70111170001 0111
81000180001 1000
91001190001 1001

3초과 코드 (excess-3 코드)

  • BCD 코드에 3을 더한 코드
  • 초창기 통신 체계에서 사용했다고 한다.
  • 신호가 안들어왔을 때와 0을 보냈을 때를 구분하기 위함.
10진수BCD 코드3초과 코드
000000011
100010100
200100101
300110110
401000111
501011000
601101001
701111010
810001011
910011100
  • 굳이 3을 더한 이유는 (0, 9), (1, 8) ... 쌍으로 보수 관계가 성립하기 때문이다.
    (0: 0011, 9: 1100 각 비트를 뒤집으면 보수, 1: 0100, 8: 1011, ...)

패리티 비트

  • 옛날에 에러 검출을 위해 사용
  • 비트가 뒤집힌 값으로 잘못 전송되었을 때, 탐지하기 위한 방법
  • 1 비트가 짝수 개인지, 홀수 개인지 세어서 0, 1 비트를 추가로 사용했다고 한다.
  • 패리티 비트의 다음 세대가 해시 코드라고 한다.
profile
필기맨

0개의 댓글