디지털 논리회로 2. 디지털 시스템에서 사용하는 숫자 ## 2진수 사칙연산

컴퓨터에서 0과 1의 한 자리를 1bit라고 한다. 8개의 bit가 모이면 1byte가 된다. 8bit = 1byte

(여기서 나왔다 8진법)

논리회로는 컴퓨터의 기반이 된다. 컴퓨터가 하나의 정밀한 논리회로 그 자체이기 때문이다.

컴퓨터... 라는 말을 생각하면 어떤 이미지가 떠오르는가? 옛날에는 도스의 검은화면과 ncd의 파란 화면 mdir pm 등의 푸리죽죽한 화면에 exe 의 파란색 com의 붉은색이 ... gwbasic의 검은색이 떠올랐다면 요즘에는 누구나 윈도우즈를 생각할 것 같다.

윈도우즈의 파란화면~

마우스와 키보드, lcd모니터.. 요즘의 컴퓨터라면 이런 것들이 연상된다.

진공관 컴퓨터 애니악.. 그게 컴퓨터? 그게뭘까? 라고 생각해보면 그건 그냥 계산기다. 내키보드 옆에 놔둔 시험볼때만 쓰는 전자계산기의 성능보다 훨씬 떨어질 것 같다. 아마 맞을거다. 요즘은 만원만 주면 주머니용 애니악을 살 수 있다.(쌀집계산기 아니고 회계계산기다~만언)

진공관이라고 하면 아마 대부분이 오디오 정도를 생각할 것 같다. 전기 많이 먹는 고급 오디오...트랜지스터가 개발된 이후부터 진공관을 사용한 회로는 오디오 회로 이외에는 아마 없을거다. 가격이나 전력소모나 속도나 뭘로 보나 진공관은 실용성이 떨어진다.

어쨌든 그 엄청난 전열기구를 가지고 복잡한 미사일의 궤도를 계산하려면 시간도 많이 걸리고 전기도 많이 먹고 했을거다.

내용이 옆길로 샜다.

2진법은 논리회로에서 사용하기 위해 만들어진 수다.

그런데 컴퓨터에서 쓰기 위해서는 2진법의 숫자를 그대로 쓸 수가 없었다.

AND OR NOR 등의 논리회로를 이용한 덧셈에서 2진수의 숫자를 그대로 사용하면 음수의 연산을 하기가 힘들어진다.

일단 양수와 음수를 표시하기가 힘들다.

0과 1만을 인식하는 논리회로에게 음수와 양수를 인식시키려면 어떤 방법을 사용하는게 좋을까?

컴퓨터 디자이너들은 2진수의 맨 앞 자리를 한개 희생해서 0과 1을 표시하는 방법을 택했다.

그럼 10101010101001010101010101001의 코드를 입력한다면 어디가 맨 앞 자리고 어디가 맨 뒷자리인지는 어떻게 알 것인가?라는 것이 또 문제가 된다. 그래서 8bit를 1byte로 하는 크기의 단위를 정하게 됐다.

8개 bit의 가장 앞의 숫자는 음수와 양수를 표현하게 됐다.

(큰 숫자를 표현하고 싶으면 2바이트 4바이트씩을 사용해도 된다. 요즘의 프로그래밍 언어는 4바이트(32비트)를 기본단위로 사용한다. 일단 배우기 쉬우니까 1바이트를 기본으로 연습해 보자)












A7 A6 A5 A4 A3 A2 A1 A0

A7이 0이면 양수이고

A7이 1이면 음수이다

1의 보수 방식(1's complement form)

1's complement form 은

양수는 우리가 아는대로 이진수로 표기하고

음수는 11111111-x 의 형태로 저장하는 방식이다.

예를 들어 00001101의 1's complement form 은 11110010이다.

자세히 봤다면 알 수 있겠지만 0을 1로 1을 0으로 반전하는 방법으로도 1's complement form 을 구할 수 있다.

1의 보수 방식은 0에 대하여 2개의 코드가 존재한다는 단점을 가지고 있다.

00000000은 +0이고 11111111은 -0이다.

2의 보수 방식(2's complement form)

이것을 설명하기 위해 1의 보수를 설명했다. 2'complement form이 디지털 시스템에서 흔히 사용되는 숫자 표기 방식이다.

2's complement form 의 음수값은 10000000-x 이다.

연습문제

-14을 8비트 2의보수 방식으로 표현하시오.

일단 +14의 2진값을 구해야 한다. 14의 2진수표기값은 0000 1110 이다.

1 0000 0000 - 0000 1110을 해주면 값을 쉽게 구할 수 있는데 더 편한 방법으로

00001110의 보수를 취해줘서 1의 보수를 구하고 1의 보수에서 1을 더해주는 방법이 있다.

11110001 +1 = 1111 0010

1111 0010 = -14

왜 귀찮게 2의 보수를 사용하는지는 덧셈과 뺄셈을 해보면 쉽게 알 수 있게 된다.

2의 보수를 사용하면 더하기만으로 덧셈과 뺄셈을 모두 해결할 수 있다.

곱셈과 나눗셈은 ...힘들다. 그냥 반복노가다.

곱셈은 100 * 50이라면 100을 50번 더해주고

나눗셈은 100 / 50이라면 100에서 50을 빼준다. 0이 될 때까지...

C에서 '/'는 나눗셈 기호고 '%'는 나머지를 구하는 기호다.

100 / 33 = 3

100 % 33 = 1

이 되는 식이다.

100에서 33을 3번 빼주면 1이 남는다.

8비트 기억 소자를 이용한 시스템의 사용 영역은 -128~127까지다. 이 사용범위를 벗어나면 overflow가 발생하여 잘못된 값이 나오게 된다.

100 + 30 = 130

01100100 + 00011110 = 10000010 (= -2)

Leave a Reply

Your email address will not be published. Required fields are marked *

 characters available

2 + = 4