컴퓨터구조

BCD코드 (binary coded decimal) 기초

콘파냐 2014. 11. 26. 16:01

BCD(Binary-coded decimal)-이진코드화된 십진수, 말 그대로 십진수를 이진코드로 표기한 것이다. 2진코드로 표기는 했지만 실제 십진수에 대응되는 2진수의 값과 BCD는 약간의 차이가 있다.

다음표는 각 십진수 숫자에에 해당하는 BCD코드다.







컴퓨터는 0과1의 2진코드를 사용하기 때문에 사람이 사용하는 십진수를 사용하기 위해서 십진수를 2진화할 필요가 있다. 이는 단순히 십진수를 2진수로 바꾸는 것이 아닌, 규칙성을 가진 형태의 2진코드로 바꾸는 것을 의미한다.

십진수의 기수(사용하는 수의 개수)는 0~9로 10개이고, 각각의 기수를 2진수로 바꿔 표현한 수를 BCD라고 한다.


BCD의 사용과 일반적인 2진수와 차이점의 예.

459의 2진수 표현은 111001011 111011011 //2015/7/4 수정


2014/02/24 - [컴퓨터구조] - 10진수를 2진수로 변환하는 방법


BCD로 표현하면 다음과 같다.


특징을 살펴보면

1. 십진수의 각 자리수에 대응되는 4개의비트를 사용하여 표현.

2. 각 4개의 비트의 범위는 0000~1001.

 - 1010~1111은 사용되지 않음.


10진수를 2진코드화된 10진수로 표현하는 것은 간단하다. 하지만 BCD끼리의 연산을 2진수처럼 하면 문제가 생긴다..



BCD가산


십진수 덧셈. 298+383

위 연산을 이진수로 고치면,


2진수로 고친 후 더하는 것은 다들 아실거라 생각하고, 이번엔 BCD로 변환하여 연산을 해보면.


BCD가산

1. 먼저 십진수의 각 자리수 별로 BCD로 바꾼다.



이진수변환과 BCD를 비교해보면 다르다는 것을 알 수 있다.

BCD 변환 값을 단순히 더하면 원하는 값을 얻지 못할 수 있다.


298의 값의 이진수와 BCD 값을 비교해보자.


BCD는 2진표기법의 4비트를 단위로 십진수의 기수 값 하나를 표현한다. 십진수의 기수는 총 10개고 4비트의 표현 가능 값은 총 16개이므로 6개의 표현 값은 BCD에서 쓰이지 않는다. 다시 말해 1001(9)다음 수는 1010~1111까지의 값은 건너뛰어 올림(다음자리수로 수를 넘김)을 한다.


※참고 : 십진수에서 올림(캐리)이 발생하는 경우, 제일 큰 수를 생각해보면 9+9가 되어 18이되고 이전 자리수에서 캐리가 발생한 경우가 있더라도 9+9+1=19가 되어 항상 1이 된다.


그럼 BCD값들을 더해보자.


1의 자리에 두 BCD를 더하면 1011이 나오고 이 값은 BCD표기법의 값을 넘어선다. 10이 넘어간다는 뜻이고 캐리(올림수)가 발생한다는 뜻이다. 위 참고를 보면 캐리값은 항상 1이 나오게 된다. 1001이 BCD의 표현중 가장 큰 수고 값이고 여기에 1을 더해주면 캐리값으로 넘어가게 된다. 하지만 2진수 표현은 캐리값으로 넘어가지 않고, 1111까지 표기가 가능하다. 이 표기 갭을 없애기 위해 BCD와 2진수의 캐리 값의 차이인 6을 더해준다.

 이렇게 범위를 넘어가는 수가 결과값으로 나오면 10진수 캐리와 BCD의 캐리의 차이인 6을 더해주면 BCD 표기법으로 바꿀 수 있다.

※ 참고 : 십진수 6은 이진수 0110


1의 자리수


1의 자리수 BCD의 합은 1011이 나왔고 이 값은 1001이 넘어가므로 0110을 더해준다. 더한 값은 BCD 표기법으로 4자리 씩 끊어서 보면 10의 자리 캐리가 생기고 1의 자리는 1이된다.


캐리값을 포함 십의 자리수 연산(덧셈)을 해서 10010이 나왔다 이 값은 역시 1001보다 크므로 0110을 더해준다. 캐리값이 있고 백의 자리로 캐리값을 넘겨준다.


캐리값을 포함 더하면 0110이 된다.


0110 1000 0001 을 십진수로 표현해 보면 6 8 1이 된다.

반응형