본문 바로가기

게이트와 진리표

AND·OR·NOT·XOR와 NAND·NOR를 진리표로 비교하고 비트 마스크를 직접 계산합니다.

문이 닫혀 있고 안전 센서가 정상일 때에만 기계를 작동시키려 합니다. 두 조건의 참·거짓을 1·0으로 표현하면 입력 조건과 출력의 관계를 정확히 적을 수 있습니다. 논리 게이트는 이 관계를 구현하는 회로의 기본 단위입니다.

진리표를 먼저 완성하기

진리표는 가능한 입력 조합을 빠짐없이 나열합니다. 입력 A·B 두 개면 2²=4행입니다. AND는 모두 1, OR는 하나 이상 1, XOR는 서로 다를 때 출력이 1입니다. NOT은 한 입력을 반전합니다.

ABANDORXORNANDNOR
0000011
0101110
1001110
1111000

NAND는 AND 출력의 반전, NOR는 OR 출력의 반전입니다. XNOR는 XOR 출력의 반전으로, 같을 때 1입니다. NAND나 NOR만으로도 다른 기본 논리를 구성할 수 있으므로 범용 게이트라고 부릅니다. 예를 들어 NAND(A,A)는 NOT A입니다.

실제 회로에서는 전압 범위를 0·1로 해석하고, 신호가 바뀐 뒤 출력이 안정될 때까지 지연이 있습니다. 진리표는 안정된 입력·출력 관계를 설명하며 모든 순간의 전압 변화를 설명하지는 않습니다.

여러 비트에는 자리별로 적용합니다

A=10010010, 마스크 B=00001111이면 A OR B = 10011111입니다. 하위 네 비트를 1로 세트합니다. A AND 11110000 = 10010000은 하위 네 비트를 클리어합니다. A XOR 00001111 = 10011101은 하위 네 비트를 반전합니다. 원하는 자리만 통과시키는 것이 비트 마스크입니다.

비교에도 XOR를 사용할 수 있습니다. 두 패턴의 XOR 결과의 모든 비트가 0이면 두 패턴은 같습니다. 다른 경우의 결과가 반드시 숫자 1인 것은 아닙니다. 예를 들어 0000 XOR 1000 = 1000입니다. “하나라도 다른가?”라는 단일 조건은 XOR 출력 비트들을 OR로 합쳐 구할 수 있습니다.

a = 0b10010010
assert a | 0b00001111 == 0b10011111
assert a & 0b11110000 == 0b10010000
assert a ^ 0b00001111 == 0b10011101
assert (0 ^ 8) == 8
assert (a ^ a) == 0

|, &, ^는 자리별 OR·AND·XOR입니다. 프로그래밍 언어의 단락 평가 논리 연산과 혼동하지 마세요. Python의 not는 논리 부정이고 ~는 정수 비트 반전인데 고정 폭이 아니므로 폭 제한 없이 사용하면 이 교재의 패턴과 달라집니다.

독립 문제: 경고등의 조건

센서 A와 B 중 하나 이상이 위험을 알리면 경고등 Y가 켜집니다. 두 센서가 서로 다른 보고를 할 때만 별도 점검등 Z를 켭니다. 두 출력의 진리표를 작성하세요. 이어 8비트 10100101에서 bit 2만 1로 만들고 bit 7만 0으로 만든 결과를 각각 구하세요. 비트 번호는 오른쪽 끝이 0입니다.

힌트

Y는 OR, Z는 XOR입니다. 한 비트를 세트할 때에는 해당 자리만 1인 마스크를 만듭니다.

풀이

입력 00·01·10·11에서 Y는 0·1·1·1, Z는 0·1·1·0입니다. bit 2는 이미 1이어서 OR 00000100의 결과는 10100101 그대로입니다. bit 7을 지우려면 AND 01111111을 사용해 00100101을 얻습니다.

XOR를 “또는”으로 기억했다면 두 입력이 모두 1인 행을 다시 보세요. 다음 부울대수와 간소화에서는 같은 진리표를 더 단순한 식으로 표현합니다.