1.9~1.11 비트 연산

Posted by yunki kim on November 3, 2022

1.9 비트 연산

  모든 논리적 처리를 분해해 비트로 표현할 수 있다고 해도, 비트 자체로는 아무런 정보가 되지 못한다. 비트 자체는 다른 비트와의 관계를 가질 가능성이 없다. 비트를 통해 결과를 내기 위해선 한 개 이상의 비트를 통해 어떤 관계성을 판단하고 한 개 이상의 비트를 출력하는 비트 연산이 필요하다.

  가장 기본적인 비트 연산으로는 AND, OR, XOR, NOT(Inverter)가 존재한다. 이 연산들이 회로로 구현되면 그것을 게이트 회로 또는 게이트라고 한다.

  비트 연산을 논리곱, 논리합이라고 표현하기도 한다. 논리곱 결과는 False를 0, True를 1로 두고 곱셈 연산을 하는 것과 일치하다.

곱셈 연산 AND(논리곱)
0 x 0 = 0 0 AND 0 = 0
0 x 1 = 0 0 AND 1 = 0
1 x 0 = 0 1 AND 0 = 0
1 x 1 = 1  1 AND 1 = 1

  논리합의 경우 1+1=2을 어떤 시각으로 바라보느냐에 따라 두 가지 경우로 나뉜다. 비트에서는 0과 1만 존재하기 때문이다. 1+1=0으로 해석한다면 이는 "표현할 수 있는 범위를 넘어서면 반복이 발생해 0으로 되돌아간다"라는 의미다. 반대로 있음, 없음의 관점에선 0 이외의 모든 수를 "있음"으로 판단하므로 1+1=1이 된다. 전자 연산을 배타적 논리합, 후자의 경우를 논리합이라 한다.

합 연산 OR(논리합)
0 + 0 = 0 0 OR 0 = 0
0 + 1 = 1 0 OR 1 = 1
1 + 0 = 1 1 OR 0 = 1
1 + 1 = 2  1 OR 1 = 1
합 연산 XOR(배타적 논리합)
0 + 0 = 0 0 XOR 0 = 0
0 + 1 = 1 0 XOR 1 = 1
1 + 0 = 1 1 XOR 0 = 1
1 + 1 = 2  1 XOR 1 = 0

  논리 연산의 반전(NOT)은 반전이라기보다는 빼기 연산에 더 가깝다. NOT x=r 은 1-x=r에 상응하는 결과가 된다.

논리 부정 수치 계산 (1 - x = r)
NOT 1 = 0 1 -1 = 0
NOT 0 = 1 1 - 0 = 1

1.10 진리표

  위와 같은 비트 연산 내용을 말로만 기술할 경우 애매한 상황이 발생할 수 있다. 예를 들어 "두 개의 입력이 양쪽 모두 True라면 결과는 True"이라 라는 기술이 있다 해보자. 일부 사람들은 이 말을 듣고 "두 개의 입력 중 하나라도 False이면 결과는 False"이다라고 생각할 수 있다. 하지만, 이 비트 연산에 부정이 포함된다면 이 말은 틀리게 된다. 부정은 True 또는 False 어느 쪽이 되어도 상관없는 상태다.

  이런 애매한 상황을 명확히 기술하기 위해 모든 케이스를 기술한 표인 진리표를 사용한다. 진리표에서 부정은 'X'로 표기한다. 위에서 든 예시를 진리표로 서술하면 다음과 같다.

INPUT OUTPUT
A B Q
X 1 1

 

1.11 진리표와 등가 회로

  표면적으로는 다른 연산이여도 진리표가 동일하면 차이가 없는 등가이다. 예를 들어 양의 논리 입출력 AND와 음의 논리 입출력 OR연산은 등가이다. 아래의 진리표에서 True, False를 보지 말고 0, 1을 보면 두 진리표는 완벽히 일치하다.

양의 논리 AND (0 = False)
A B Q
0 (False) 0 (False) 0 (False)
0 (False) 1 (True) 0 (False)
1 (True) 0 (False) 0 (False)
1 (True) 1 (True) 1 (True)
음의 논리 OR (1 = False)
A B Q
0 (True) 0 (True) 0 (True)
0 (True) 1 (False) 0 (True)
1 (False) 0 (True) 0 (True)
1 (False) 1 (False) 1 (False)

 

출처 - 성공과 실패를 결정하는 1%의 프로그래밍 작동 원리