이진 부호화 십진수

Binary-coded decimal (BCD). 십진수비트열로 표현하기 위한 부호화 방법. 여러 자리의 십진수를 이진수로 변환한 뒤 그걸 그대로 저장하는 보통의 방법과는 달리, BCD에서는 각 자리마다 4비트씩 고정하여 저장하기 때문에 출력이 훨씬 간단한 대신 같은 자릿수를 표현하는데 더 많은 비트가 필요하다.

가장 널리 쓰이는 BCD 8421 부호화에서는 0부터 9까지의 자리를 각각 0000부터 1001까지 해당하는 이진수로 저장하고, 남는 여섯 개의 비트열을 부호 용으로 사용(양수 1100, 음수 1101, 부호 없음 1111)한다. 이렇게 나온 4비트열을 실제로 저장하는 방법은 대략 몇 가지로 나뉘는데:

  • 압축 없음: 하위 4비트에 각 자리를 저장하고 상위 4비트는 (보통 0으로 채워서) 무시한다. 이를테면 12345는 01 02 03 04 05가 된다. 부호 비트는 사용하지 않는다(따라서 이 방법으로는 음수를 저장할 수 없다).
  • 압축 BCD (packed BCD): 높은 자리부터 상위 4비트, 하위 4비트 순서대로 채우고, 맨 마지막 자리에 부호 비트를 넣는다. 자릿수가 짝수가 아닐 경우 맨 앞에 0 자리를 넣어서 채운다. 이를테면 -1234는 01 23 4D가 된다.
  • 존 십진수 (zoned decimal): 하위 4비트에 자리를 넣고, 상위 4비트에 부호 정보를 넣는다. 부호 정보는 맨 마지막 바이트에만 넣고 나머지 바이트는 1111(F)로 채운다. 이를테면 +1234는 F1 F2 F3 C4가 된다. 이 방법은 EBCDIC 환경에서 널리 쓰였는데 맨 마지막 자리를 뺀 모든 자리를 그대로 EBCDIC 숫자로 읽을 수 있기 때문이었다.

그 밖의 변종으로 BCD를 고정소숫점 실수를 표현하는 데 쓰는 경우도 있다. 이 경우 어디에 소숫점이 붙는지에 대한 정보는 바이트열만으로는 알 수 없다.

다른 부호화

BCD에서 각 4비트에 어떤 가중치를 할당하느냐에 따라 여러 다른 부호화가 가능하다. 다음은 대표적인 예제들이다.

자리 8421 Excess-3 2421 8421 8421*1)
0 0000 0011 0000 0000 1010
1 0001 0100 0001 0111 0001
2 0010 0101 0010 0110 0010
3 0011 0110 0011 0101 0011
4 0100 0111 0100 0100 0100
5 0101 1000 1011 1011 0101
6 0110 1001 1100 1010 0110
7 0111 1010 1101 1001 0111
8 1000 1011 1110 1000 1000
9 1001 1100 1111 1111 1001

이 중 Excess-3, 2421, 8421은 비트를 반전시키면 9의 보수를 쉽게 구할 수 있다는 장점이 있다. 또한 Excess-3의 경우 여기에 더해 각 자리의 정렬이 그대로 보존되고, 기존의 덧셈 회로를 그대로 쓸 수 있다는2) 장점이 있어서 한동안 널리 쓰였다.

같이 보기

1) 자리 0에 10에 해당하는 값을 대응시켰다.
2) 덧셈 후 그 결과가 12를 넘으면 3을 더하고, 아니면 3을 뺀다.

도쿠위키DokuWiki-custom(rev 9085d92e02)을 씁니다.
마지막 수정 2011-08-31 10:53 | 작성자 lifthrasiir