■ 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진수 변환
'컴퓨터공학 > 디지털공학개론' 카테고리의 다른 글
7. 논리 연산 게이트 (0) | 2024.07.07 |
---|---|
6. 오류 검출코드와 영문-숫자 코드 (0) | 2024.06.12 |
4. 부호표시의 개념 (0) | 2024.06.12 |
3. 10진수, 2진수, 8진수, 16진수의 개념과 변환 (0) | 2024.06.12 |
2. 디지털 시스템과 컴퓨터의 구성 (0) | 2024.05.26 |