{{위키데이터 속성 추적}}
[[파일:Binary clock.svg|250px|thumbnail|right|[[바이너리 클럭]]은 LED를 사용하여 이진값을 표현할 수 있다. 이 클럭에서 각 LED 컬럼은 전통적인 [[육십진법]] 시간의 이진화 십진법 수치를 보여준다.]]
'''이진화 십진법'''({{lang|en|Binary-coded decimal, BCD}})은 [[이진수]] 네 자리를 묶어 [[십진수]] 한 자리로 사용하는 기수법이다.

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

== 규칙 ==
{| class="wikitable" align="center"
|- style="text-align:center"
! 십진법
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9
|- style="text-align:center"
! BCD
| 0000 || 0001 || 0010 || 0011 || 0100 || 0101 || 0110 || 0111 || 1000 || 1001
|}

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

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

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

많은 컴퓨터가 8비트를 묶어서 1[[바이트]]로 처리하기 때문에, 이런 환경에서 이진화 십진법을 저장하는 방법은 두 가지가 있을 수 있다.
* 한 바이트에 한 자리만을 저장하고, 남는 네 자리를 0000이나 1111([[EBCDIC]]의 경우), 또는 0011([[미국 정보 교환 표준 부호|ASCII]]의 경우) 등으로 채운다.
* 한 바이트에 두 자리를 저장한다.

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

== 묶음 이진화 십진법 ==
'''묶음 이진화 십진법'''({{lang|en|Packed BCD}}) 또는 줄여서 '''묶음 십진법'''({{lang|en|Packed decimal}})은 널리 쓰이는 이진화 십진법의 변형으로, 한 바이트에 두 자리를 묶어서(pack) 저장하고 마지막 자리에 해당하는 4비트를 부호로 나타내기 위하여 사용한다. 다른 자리들과 구별하기 위하여 부호 자리는 9보다 큰 숫자를 사용하며, 그 대응은 다음과 같다.
{| class="wikitable" align="center"
! 부호 자리 !! 이진법 !! 대응되는 부호
|- style="text-align:center"
| '''A''' || 1010 || +
|- style="text-align:center"
| '''B''' || 1011 || -
|- style="text-align:center"
| '''C''' || 1100 || + (선호됨)
|- style="text-align:center"
| '''D''' || 1101 || - (선호됨)
|- style="text-align:center"
| '''E''' || 1110 || +
|- style="text-align:center"
| '''F''' || 1111 || + (부호 없음)
|}

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

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

== 존 십진법 ==

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

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

== 역사 ==

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

[[1972년]]에 [[미국 대법원]]은 이진화 십진법으로 부호화된 숫자를 이진법으로 변환하는 방법에 대한 특허를 인정했던 원심을 무효화하였다. ([http://caselaw.lp.findlaw.com/scripts/printer_friendly.pl?page=us/409/63.html Gottschalk v. Benson]을 참고하라.) 이 결정은 소프트웨어 및 알고리즘이 [[소프트웨어 특허|특허]]로 인정받을 수 있는지에 대한 중요한 사례로 남아 있다.

== 같이 보기 ==
* [[첸-호 부호화]]
* [[집적된 묶음 십진법]]
* [[그레이 부호]]
* [[EBCDIC]]
* [[3 초과 부호]]

== 외부 링크 ==
* {{언어링크|en}} [http://www2.hursley.ibm.com/decimal/chen-ho.html IBM: 첸-호 부호화 요약]
* {{언어링크|en}} [http://www2.hursley.ibm.com/decimal/DPDecimal.html IBM: 집적된 묶음 십진법 요약]
* {{언어링크|en}} [https://web.archive.org/web/20070716193926/http://www.engr.udayton.edu/faculty/jloomis/ece314/notes/devices/binary_to_BCD/bin_to_BCD.html 시프트-더하기-3 알고리즘]

[[분류:컴퓨터 산술]]
[[분류:기수법]]