Binary-coded decimal (BCD). 십진수를 비트열로 표현하기 위한 부호화 방법. 여러 자리의 십진수를 이진수로 변환한 뒤 그걸 그대로 저장하는 보통의 방법과는 달리, BCD에서는 각 자리마다 4비트씩 고정하여 저장하기 때문에 출력이 훨씬 간단한 대신 같은 자릿수를 표현하는데 더 많은 비트가 필요하다.
가장 널리 쓰이는 BCD 8421 부호화에서는 0부터 9까지의 자리를 각각 0000
부터 1001
까지 해당하는 이진수로 저장하고, 남는 여섯 개의 비트열을 부호 용으로 사용(양수 1100
, 음수 1101
, 부호 없음 1111
)한다. 이렇게 나온 4비트열을 실제로 저장하는 방법은 대략 몇 가지로 나뉘는데:
01 02 03 04 05
가 된다. 부호 비트는 사용하지 않는다(따라서 이 방법으로는 음수를 저장할 수 없다).01 23 4D
가 된다.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) 장점이 있어서 한동안 널리 쓰였다.