x0FANSA-hk 님의 블로그

74HC283과 2의 보수 본문

Planet

74HC283과 2의 보수

x0fansa-hk 2026. 7. 15. 16:40

 오늘 다뤄볼 IC는 가산기 입니다. 이름 그대로 덧셈을 수행해 주는 IC이지요. 단 차이점이 있다면, 인간이 주로 사용하는 10진수가 아니라, 0과 1로만 표현가능한 2진수로 덧셈을 한다는 점입니다. 끝.


74HC283으로 보는 가산기

 대표적인 가산기IC인 74HC283으로 가산기를 좀더 구체적으로 살펴보겠습니다.

https://www.alldatasheet.co.kr/view.jsp?Searchword=74HC283

 

LM324 데이터시트, PDF

LM324 데이터시트. 부품명: LM324. 데이터시트: 136Kb/7P. 제조업체: NXP Semiconductors. 상세설명: Low power quad op amps. 1,089 Results. 데이터시트: 142Kb/14P. 제조업체: STMicroelectronics.

www.alldatasheet.co.kr:443

 

핀맵을 봅시다ㅏㅏㅏ.

해당 데이터시트 링크 중 NXP사의 그림을 가져옴을 밝힘

역할은 간단합니다. 위에 올려준 사진 중 기능별로 핀들을 모아둔 오른쪽사진으로 설명하겠습니다.

A1,A2,A3,A4: 합쳐서 총 4비트이지요. A4가 MSB이고 차례로 내려와 A1이 LSB입니다. 이에 맞게 4비트값을 입력하면 됩니다.

B1,B2,B3,B4: 역시 합쳐서 총 4비트이지요. B4가 MSB이고 차례로 내려와 B1가 LSB입니다. 이에 맞게 4비트값을 입력하면 됩니다.

S1,S2,S3,S4: 마찬가지로 합쳐서 총 4비트입니다. S4가 MSB이고 차례로 내려와 S1가 LSB입니다. 입력된 두 값을 2진수 덧셈을 통해 출력합니다.

Cout: 2진수 덧셈을 했을 때, 올림이 발생하여 더이상 4비트로 표현할 수 없을 때 1을 출력되는 비트입니다. 이 비트를 통해 다음 상위 4비트를 담당하는 74HC283에 입력하여 8비트 덧셈으로 확장할 수 있습니다. 혹은 응용되는 기능으로 결과만큼은 5비트로 표현하게 할 수 있습니다.

Cin: 하위 4비트에서 올림이 발생할 경우, 올림을 받는 핀입니다. 따라서 상위 283의 Cin과 하위 283의 Cout이 연결되어있어야 합니다. 혹은 1을 더한다는 특징을 응용해서 4비트 입력중 하나는 0만 입력하고 Cin에 1을 입력하여 i++ 연산을 흉내낼수도 있습니다.

 

 여기서 조심해야할 점이 하나 있습니다. 바로 (숱하게 강조했던)floating입니다. 이 IC역시 입력이 이산적으로 게이트에 입력되는 구조이기에 floating에 취약합니다. 따라서 모든 입력핀(A1~A4, B1~B4, Cin)Pull-Down저항을 통해 기본적으로 0을 가지게 연결해야합니다.(1을 가지게 할수도 있지만 덧셈목적으로 사용하는 특성상 잘 안씁니다.)


2의 보수와 74HC283으로 뺄셈하기

 덧셈은 그냥 정해진 핀에 맞춰, 더할 값 2개를 입력해주면 끝입니다. 그러면 뺄셈은 어떻게 할까요? 뺄셈의 경우 음수를 더하는 것으로 표현합니다. 무슨 말이냐면...

6 - 4 = 2

6 + (-4) = 2 로 하자는 거에요. 차피 둘이 같으니까

 그러면 음수는 어떻게 표현할까요? 4비트의 경우 0~15일뿐, -1,-2 같은건 안보이는데 말이죠. 이때 사용한 방법이 그 유명한 2의 보수법 입니다.


2의 보수

 2진수에서 음수를 표현하는 방식중 하나이며 사실상 거의 모든 컴퓨터가 음수를 표현하는 방식입니다. 표현법은 간단합니다. 양수의 모든 비트를 반전시킨 이후 LSB에 1을 더합니다. 즉, 반대로 음수를 양수로 만들려면 똑같이 모든 비트를 반전시킨 이후 1을 더합니다.(음수의 음수는 양수니까요.) 예시를 들어볼게요.

EX1) -5를 표현하기: 5의 경우 0b0101 입니다. 2의보수법으로 음수로 만들어봅시다. 우선 모든 비트를 반전시킵니다. 그러면 0b1010 입니다. 이후 1을 더하면 0b1011입니다. 이게 -5 입니다. (검산: 한번더 2의 보수를 하면 0b1011→0b0100→0b0101으로 다시 5가 나옴을 볼 수 있습니다.)

EX2) 0b1011을 음수로 만들기: 이게 문제입니다. 이미 음수잖아요. 사실 이게 귀에걸면 귀걸이, 코에걸면 코걸이입니다. 경우를 나눠볼게요.

1. 4비트 체계이다.: 애초에 11을 음수로 만들 수 없습니다. 표현범위가 -8~7까지 입니다. -11를 표현하는거 자체가 불가능하기에 문제 자체가 틀렸습니다.

2. 5비트 이상 체계이다.: 여기서는 가능합니다. 8비트 체계로 예를들자면, 0b1011이 0b00001011과 같기 때문이죠. 따라서 이걸 가지고 2의 보수를 진행하면 0b11110101입니다. 즉, 해당 수를 음수로 만들기 전에, 우선 해당 체계에서 표현이 가능한지를 먼저 확인해보는게 중요합니다. (은근 헷갈리는데 이건 메모리구조나 unsigned를 배우면 나중에 이해가 될 거에요.)


74HC283을 사용한 회로실험

역시 회로를 만들어서 여러가지 연산을 해보았습니다.


1+1

 은 귀요미 가 아니라 먼저 2진수로 바꿉시다. 10진수 1은 2진수로도 1입니다. 4비트로 표현하면 0b0001인 것이지요. 따라서 딥스위치 2개를 0001, 0001 로 맞춰줍니다. 그리고 1+1=2이기 때문에 LED는 0b0010으로 켜져야 합니다. 실험결과 예상대로 되었음을 볼 수 있습니다.


4+2

 역시 2진수로 바꾸면 각각 0b0100, 0b0010입니다. 더하면 0b0110입니다. 역시 LED가 예상대로 켜짐을 볼 수 있습니다. 0b0110이 10진수롤 6이기 때문에 4+2=6이 성립함을 볼 수 있습니다.


7-3

 7은 0b0111이고, -3은 0b0011에 2의 보수를 취한 0b1101입니다. 둘이 더하면 0b10100입니다. 그러나 4비트 체계이기에 하위 4비트만 딴다면 0b0100인데 이는 7-3=4 인것이 성립합니다.


1-5

 1은 0b0001이고, -5은 0b0101에 2의 보수를 취한 0b1011입니다. 둘이 더하면 0b1100인데 이건 음수입니다. 다시 음수를 취해 양수로 바꾸면 0b0100인데, 이건 4이므로 1-5=-4였음을 확인할 수 있습니다.


12+2 → (-4)+2

 12는 0b1100, 2는 0b0010입니다. 더하면 0b1110으로 값은 14입니다.

여기까지는 평범한 덧셈처럼 보이지만 0b1100을 음수로 해석하는 경우도 가능하기에 예시로 들었습니다. 0b1100은 음수로 가정해서 다시 음수를 취해 양수로 바꾸면 0b0100입니다. 즉 0b1100은 -4이고 10진수 수식은 -4+2로 값은 -2입니다. 2인 0b0010을 2의보수로 음수로 바꾸면 0b1110인데 이걸 부호없는 정수로 보면 초기에 구한 14와 같음을 확인할 수 있습니다.


14+11

 일단 둘이 더하면 25로 4비트 체계에서는 오버플로입니다. 그러나 74HC283은 올림까지 표현할 수 있습니다. 따라서 올림이 출력되는 9번핀에 적색LED를 달아 출력을 5비트체계로 바꾸었습니다. 14가 0b1110, 11이 0b1011이므로 둘이 더하면 0b11001이 나오는데 이는 10진수로 25이므로 성립함을 볼 수 있습니다. 역시 실험결과도 옳게 나옵니다.

1. 회로구성(9번핀에 적색LED가 추가됨), 2. 14+11, 3. 4+2

 

 이게 올림이 없는 상황에서도 적색 LED가 나오는지 실험하기 위해, 이전에 했던 예시인 4+2를 해보았습니다. 4+2는 6이므로 4진수 체계인 16을 넘지 않아 올림이 없어서 적색 LED가 켜지지 않았음을 볼 수 있습니다.


ADD.zip
0.07MB