본문 바로가기
컴퓨터공학/디지털공학개론

5. 디지털 코드

by meow0110 2024. 6. 12.

■ BCD

- 0부터9까지만 

- 그래서 2진수에서 1010~1111(10진수 10~15까지)까지 무효코드가 된다. 

- 8421 코드에서 10부터는 앞에 '1'이 붙는다. 왜? 일단 10을 1,0으로 나눈다. 그리고 각 8421코드로 보면? 

- 1, 0은    0001 0000 이다. 즉, 앞에 000은 생략해도 되니 1 0000이 되는것이다. 

 

■예제

a) 35 는  3,5 로 나눈다. 0011 0101 

b) 98 는 9,8 로 나눈다. 1001 1000

c) 170 는 1,7,0 로 나눈다. 0001 0111 0000

d) 2469 는 2,4,6,9로 나눈다. 0010 0100 0110 1001  (붉은색 부분 생략)

 

 

a)  86

b) 351

c) 9470

 

■ 가중치 방식코드 : 
- 자리마다 가중치(자릿값)를 두어 10진 값을 얻게 하는 코드
- 8421 코드, 6311 코드, 5421 코드, 5311 코드, 5211 코드, 51111 코드 등

■비가중치 방식 코드
-자리마다 가중치 없이 10진 값을 얻게 하는 코드
-3초과 코드, 그레이 코드, 2 out of 5 코드 등

 

 

■ BCD 연산 중 덧셈

- 6(0110)을 더해줘서 10~15의 범위를 넘어가게 해주는 것이다. 

- 그래도 캐리가 발생하면, 다음 4-비트 그룹을 더한다.

 

■ 예제 - 20진수로 변환해서 더하기

a) 2+6은 9가 안넘으니 그냥 더함

b) 8,0 과  1.2로 쪼갬. 그리고 각각 더함. 그러면 a와 마찬가지다.

 

■ 예제 - BCD상태로 더하기

마찬가지로 위와 같이 더하면 된다. 

 

■ 10진수로 해봤더니 9를 넘네?

c) 11

d) 120.    c,d둘다 더함이 9를 넘는다.

이럴 경우 BCD 형태로 구할 땐 0110(6)을 붙여야한다.

 

■ bcd 코드 형태로 더하기

c) 1011는 현재 bcd 코드를 벗어낫다.(bcd 코드에서 1011은 안된다! 0000~1001까지만 된다.)

그래서 0001 0001이 나온다. 즉 10001(11)이다.

d)  결과값 1011 1010(11,10) 이다. 즉 범위가 넘어갔다. 그래서 각각 0110 (6)을 더해준다.

0001 0010 0000 이 나온다. 즉 1 0010 0000(120) 이다.  

 

■ 그레이코드 : 

- 가중치가 없는 코드로 산술용 코드가 아님
- 어떤 코드가 다음 코드로 증가할 때 한 비트만 바뀌는 특징을 가지고 있어, 연속되는 숫자 간에 비트 변환이 많이 발생하여 오류가 생기는 고속 입출력 장치와 A/D 변환에서 오류를 줄이기 위해 이용

 

■ 그레이코드 뭐가 바뀌는거야?

- 2진수와 그레이코드를 비교하자. 서로 다른 부분이 있다.

- 10진수 0~9까지는 1개만 바뀐다.

-그러나 10진수 10부터는 여러개가 바뀐다. 왜? 1이나 2의 보수로 취하면 한 비트로 바뀐걸로 인식하기 때문. (모르겠다..)

 

■ 그레이코드 변환 (XOR = 덧셈)

- 여기서는 BCD 코드가 아니다. 헷갈리지 말자.

- 맨 앞 B3는 그대로  첫번째자리 1

- MSB는 여기서 B3를 말함.

- 즉 2단계는 B3(1)과 B2(0)더하면 된다 두번째자리 1

- B2와 B1을 더한다. 세번째 자리 1

- B1과 B0를 더한다. 1+1은 10이지만 앞에 1은 버린다. 그래서 네번째 자리 0이다.

- 결과 : 1110

 

■ 즉 2진수를 그레이코드로 전환하게 되면?

1011 코드가 그레이코드가 되면 1110이 된다.  

참고로 그레이코드 뒤에는 작은 숫자2를 안붙인다. 2진수 표기 하면 안됨!

 

■ XOR

- 입력이 서로 다르면, 결과는 1이다.

- 입력이 서로 같으면 결과는 0이다.

- 즉, 1+0 은 서로 다르니 1이 나오고,  1+1은 0이 된다.

 

 

■ 그레이 코드를 2진수로

 

■ 순서

- MSB는 그대로 쓴다. 1

- 처음 1이랑 두번째 1을 합한다. 10이 나오니  캐리1을 버려서 0이 된다.

- 결과값 0과 +1 을 더하면 1이 나온다.

- 결과값 1과 0 을 더하니 1이다.

- 결과값 1과 마지막자리 1을 더하면 0이다.

 

■ 위에서 배웠던  2진수 > 그레이코드와의 차이점?

- 위에서는 2진수끼리 더해서 연산함.

- 그러나 그레이코드 > 2진수는 나온 결과값을 대입하게 됨.

- 모르겠으면 위의 화살표를 잘보고 따라가보자. 

 

 

■ 3초과 코드 :

- BCD 코드에 3씩 더하면 된다.

- BCD의 무효코드는 10~15까지다. 3초과 코드는 여기에 +3씩 더하면 된다.

    무효코드
13 +3 0000
14 +3 0001
16 +3 0010
10 +3 1101
11 +3 1110
12 +3 1111

 

 

■ 예제1 (234를 3초과 코드로)

- 234를 끊는다.  2 / 3 / 4 식으로.

- 여기에 3씩 더한다.  5 / 6 / 7 이 됨. 이를 2진수로 표현.

- 0101 0110 0111 을 그대로 이어주면 된다.

- 앞자리 0은 생략가능. 그래서 101 0110 0111 이 된다.

 

■ 예제2  (879를 3초과 코드로)

예제1과 똑같다.

 

 

■ 3초과 코드의 연산

■ 캐리가 없으면  0011(3)을 빼주고

■ 캐리가 발생하면 0011(3)을 더해준다. 

 

 

■ 예제 34 +14

- 자리올림이 발생하지 않는 경우다.

- 3 / 4는  +3씩해서 6 / 7이 됨

- 1 / 4는  4 / 7이 된다.

-덧셈을 한다.

- 근데 캐리가 없다! 그래서 0011(3)을 각각 빼줘야한다. 뺄때는 뺄셈처럼하면 된다.  예를 들면 0 -1 은 안되므로 앞의 자리에서 1을 빌려오면 된다.

- 0111 은 7  / 1011은 11이다.  그래서 48의 3초과코드는  0111(7) 1011(11) 이 된다. 

 

 

 

■ 예제 36 +24

- 자리올림이 발생함.

- 뒤의 1001 과 0111 의 덧셈에서 캐리1이 발생함.

- 이 캐리를 앞자리 0110과 0101의 덧셈에 쓴다.

- 캐리가 발생했으므로 뒤에는 0011(3)을 더해준다.

- 다만 앞에서는 캐리가 발생하지 않았으므로 0011(3)을 빼준다. 앞선 예제처럼!

- 결과  1001(9)  0011(3)이 나온다. 60의 3초과 코드이니까!

 

■ 결론

- 캐리가 없으면 0011을 뺀다

- 캐리가 생기면 0011을 더한다.

- 캐리가 발생한 부분별로 해줘야 한다. 즉, 자릿수별로 덧셈과 뺄셈을 구분해줘야 한다. (예제 36+24처럼)

 

  

 

 

학습정리

1. 2진화 10진수(BCD: Binary Coded Decimal), 8421코드

  • BCD 코드의 일종으로 8421은 4비트의 가중치 23, 22, 21, 20을 의미하며, 10진수와의 상호변환이 용이하고, 특별한 언급이 없으면 BCD는 8421 코드를 의미함

2. BCD의 종류

1) 가중치 방식코드

  • 자리마다 가중치(자릿값)를 두어 10진 값을 얻게 하는 코드

2) 비가중치 방식코드

  • 자리마다 가중치 없이 10진 값을 얻게 하는 코드

3. 3초과 코드

  • BCD(8421 코드)로 표현된 값에 3을 더해 준 값의 코드로 무효코드 0000, 0001, 0010, 1101, 1110, 1111은 사용하지 않음

4. 2진수의 그레이 코드 변환

  • 그레이 코드의 최상위비트(MSB)와 2진수의 최상위비트는 동일
  • 2진수의 MSB와 바로 우측에 있는 비트를 더하고 차례대로 계속 우측의 2진 코드를 더한 값의 결과들이 그레이코드가 됨(캐리는 무시)

5. 그레이 코드의 2진수 변환