이진화 십진법

위키백과, 우리 모두의 백과사전.

바이너리 클럭은 LED를 사용하여 이진값을 표현할 수 있다. 이 클럭에서 각 LED 컬럼은 전통적인 육십진법 시간의 이진화 십진법 수치를 보여준다.

이진화 십진법(Binary-coded decimal, BCD)은 이진수 네 자리를 묶어 십진수 한 자리로 사용하는 기수법이다.

이진수 네 자리가 십진수 한 자리에 바로 대응되기 때문에 변환이 편하나, 쓰이지 않고 버려지는 데이터가 많아 같은 데이터를 저장하더라도 더 많은 데이터가 필요하다.

규칙[편집]

십진법 0 1 2 3 4 5 6 7 8 9
BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001

이진화 십진법은 특히 숫자의 십진 출력을 요하는 전자 회로와 마이크로프로세서에서 많이 사용되는데, 이는 순수 이진법으로 표현된 숫자를 십진법으로 출력하기 위해서는 복잡한 나눗셈 회로가 필요하기 때문이다. 이진화 십진법을 사용할 경우 각 자리 별로 하나씩 간단한 변환 회로를 만들어서 7세그먼트 표시 장치 등에 바로 연결할 수 있기 때문에 전체적인 구현을 간편하게 할 수 있다. 이 때문에 일부 프로세서는 아예 BCD로 덧셈과 뺄셈 등의 간단한 연산을 할 수 있는 명령을 갖추고 있다.

그 예로 6502에는 BCD모드가 존재하며, 8086에는 BCD연산을 위한 보조 캐리 플래그가 있다. 이진화 십진법에서 십진법의 각 자리는 다음 표에 따라 네 개의 비트로 변환된다. 역변환도 동일하다.

따라서 십진법 숫자 729는 이진화 십진법으로 0111 0010 1001로 표현된다.

많은 컴퓨터가 8비트를 묶어서 1바이트로 처리하기 때문에, 이런 환경에서 이진화 십진법을 저장하는 방법은 두 가지가 있을 수 있다.

  • 한 바이트에 한 자리만을 저장하고, 남는 네 자리를 0000이나 1111(EBCDIC의 경우), 또는 0011(ASCII의 경우) 등으로 채운다.
  • 한 바이트에 두 자리를 저장한다.

변환[편집]

이진법으로 표현된 숫자를 이진화 십진법으로 변환하기 위해서는 원래 숫자를 반복적으로 10으로 나누고 나머지를 취하는 연산이 필요하다. 이 연산은 비트 시프트 연산과 조건부 덧셈으로 나눗셈을 구현하는 시프트-더하기-3 알고리즘으로 구현할 수 있다.

묶음 이진화 십진법[편집]

묶음 이진화 십진법(Packed BCD) 또는 줄여서 묶음 십진법(Packed decimal)은 널리 쓰이는 이진화 십진법의 변형으로, 한 바이트에 두 자리를 묶어서(pack) 저장하고 마지막 자리에 해당하는 4비트를 부호로 나타내기 위하여 사용한다. 다른 자리들과 구별하기 위하여 부호 자리는 9보다 큰 숫자를 사용하며, 그 대응은 다음과 같다.

부호 자리 이진법 대응되는 부호
A 1010 +
B 1011 -
C 1100 + (선호됨)
D 1101 - (선호됨)
E 1110 +
F 1111 + (부호 없음)

따라서 +729는 0111 0010 1001 1100 또는 16진법으로 72 9C로 표현되고, -729는 72 9D로 표현된다. 이 표현은 일반 이진화 십진법과 마찬가지로 EBCDIC이나 ASCII와의 변환이 간단하며, 한편으로는 이진화 십진법과 같이 공간 집적도가 떨어진다는 단점을 가지고 있다.

집적도가 더 높은 부호들[편집]

일반적인 이진화 십진법과 묶음 이진화 십진법을 그대로 사용하면 십진법 세 자리를 나타내는 데는 12비트가 필요하다. 하지만 210 > 103이므로, 적절한 부호화 방법을 마련하면 세 자리를 10비트로 나타낼 수 있고, 따라서 공간을 더 효율적으로 사용할 수 있다. 이런 부호화 방법으로는 첸-호 부호화집적된 묶음 십진법이 있는데, 특히 후자의 경우 십진법 세 자리보다 더 적은 자리들도 10비트의 부분으로만 나타낼 수 있기 때문에 임의 자릿수의 십진법을 효율적으로 표현할 수 있다.

존 십진법[편집]

IBM을 비롯한 몇몇 메인프레임 시스템은 존 십진법(Zoned decimal) 표현을 지원한다. 이 방법은 한 바이트에 한 자리를 하위 4비트로 저장하고, ‘존(zone)’이라 불리는 상위 4비트를 특정한 비트열로 채워서 문자에 대응하도록 한 것이다. EBCDIC의 경우 이 존 비트가 1111에 해당하며, ASCII의 경우 0011에 해당한다. 어느 경우든 존 비트와 하위 4비트를 합하면 해당 숫자를 나타내는 문자에 대응하도록 되어 있다.

존 십진법에서 마지막, 즉 최하위 바이트의 존 비트는 부호를 나타내며, 이 부호 자리는 앞의 묶음 부호화 십진법과 동일하다. 따라서 존 십진법으로 +729는 11110111 11110010 11001001 또는 16진법으로 F7 F2 C9가 되며, -729는 F7 F2 D9가 된다.

역사[편집]

IBM은 전통적으로 ‘이진화 십진법’이라는 용어를 6비트 문자 부호화 방법을 나타내는 데 사용했다. 이 방법은 이진화 십진법의 하위 4비트와 함께 상위 2비트를 사용하여 숫자, 로마자 대문자와 특수 문자를 표현할 수 있게 한 것으로, 일반 숫자는 상위 2비트가 둘 다 0으로 채워졌다. 이 부호화는 IBM 1620, IBM 1400 계열 컴퓨터를 비롯한 초기 IBM 시스템에서 사용되다가 8비트 EBCDIC으로 대체되었다.

1972년미국 대법원은 이진화 십진법으로 부호화된 숫자를 이진법으로 변환하는 방법에 대한 특허를 인정했던 원심을 무효화하였다. (Gottschalk v. Benson을 참고하라.) 이 결정은 소프트웨어 및 알고리즘이 특허로 인정받을 수 있는지에 대한 중요한 사례로 남아 있다.

같이 보기[편집]

외부 링크[편집]