Computer Science

[Computer Science] 이진수 연산의 로직 게이트

Sergemeow 2022. 11. 9. 00:05

컴퓨터가 회사의 묵직한 솔루션을 돌리거나 콜 오브 듀티 같은 게임을 구동시키는 것도 그 근원은 true/false 스위치에서 시작한다. 지난번 포스팅에서 그 물리적 스위치의 발달에 대해 다뤘다면 이번 포스팅에서는 단순한 0/1 스위치가 어떤 로직으로 연산을 뻗쳐나갈 수 있는지에 대한 첫단계로 Not, And, Or, Xor에 대해 알아본다.

전자컴퓨팅이 태동하기 전부터 이미 이진수 연산에 대한 로직은 연구가 꽤나 진행되어있었다. 19세기 조지 부울(George Boole)이라는 학자에 의해 부울 대수학이란 이름으로 정립되었는데, 이진수 연산은 그 학자의 이름을 따서 Boole 연산이라 불리게 되었고, 오늘날에 이르러서도 프로그래밍 True/False 구분에 사용되는 boolean이라는 단어의 근원이 되었다. 

 

0. Pass

이전 포스팅에서 다룬 트랜지스터를 먼저 보자. 

이해를 돕기위해 직접 그린 일러스트인데 심미적인 면은 다소 아쉽지만 의도한 바는 충분히 나타내고 있으니 참고하시길.. 

왼쪽에서 들어가는 것이 입력이고 아래쪽에서 나오는 것이 출력이다. 컴퓨터 안에서 쉽게 말해 On, True, 1은 전류가 흐르는 상태를 의미하며 Off, False, 0은 흐르지 않는 것을 의미한다. 트랜지스터에 입력 단자로 전류가 흐르면 내부 스위치를 on으로 만들게 되고 전류가 흐르지 않으면 스위치는 off 상태로 머물게된다. 즉, 입력값이 True라면 출력값도 True이며 입력값이 False면 출력값도 False이다.

 

1. Not

Not 게이트는 출력값을 반대로 바꿔주는 역할을 한다. 입력값이 True라면 출력값은 False가 되고 입력값이 False라면 출력값은 True가 되는 것이다. 

Not 게이트를 위한 로직 일러스트이다. 입력 단자보다 출력단자가 앞서 있다. 기존에 출력단자가 있는 곳은 접지되어있다, 즉, 그 곳으로 흐르는 전류는 의미가 없다. 입력 신호가 없다면 출력단자로 전류가 상시 흐르지만 입력 신호가 들어오면 출력단자로 흐르는 전류는 중단된다. 말하자면, 변기 물을 내리면 샤워기에서 나오는 물이 일시적으로 약해지는 것과 유사하다고 볼 수 있을 것이다. 

그리하여 입력값에 따른 출력값은 다음 테이블과 같다.

 

2. And

And 게이트는 두개의 입력값과 한개의 출력값을 가진다. 두 입력값이 모두 True일 때만 출력이 True가 된다. 인간의 언어로도 표현이 된다. 가령, 내가 "나는 20살이고 컴퓨터 사이언스에 대해 포스팅 중이다"라고 말한다면, 내가 지금 포스팅 중인 것은 사실이지만 스무살은 아니기 때문에 이 문장은 거짓일 것이다. "나는 방금 귤을 먹었고 방이 조금 춥다"라고 말한다면 방금 귤을 먹은 것도 사실이고 방이 조금 추운 것도 사실이기에 문장을 참으로 간주할 수 있을 것이다.

And 게이트를 위한 일러스트이다.

그리하여 입력값에 따른 출력값은 다음 테이블과 같다.

 

3. Or

Or 게이트도 두개의 입력값과 한개의 출력값을 가진다. Or의 경우 입력값 중 하나 이상만 True라도 출력이 True가 된다. 이를테면, "오늘은 화요일이거나 수요일이다"라고 말한다면 오늘은 화요일이니 참으로 간주할 수 있는 것이다. "오늘은 화요일이거나 11월 8일이다"의 경우, 오늘은 실제 11월8일 화요일로 문장 내 모든 구가 참이니 문장도 참으로 간주할 수 있다.

Or 게이트를 위한 일러스트이다.

입력값에 따른 출력값은 다음 테이블과 같다.

 

이쯤해서 Not, And, Or의 추상화된 기호들을 먼저 보도록 하자. 

차마 직접 그릴 수 없어 가져왔다..

잘 봐뒀다면, 다음 연산 오퍼레이터로 넘어가자.

 

4. Xor

Not, And, Or까진 너무 쉬우니 조금 복잡하지만 중요한 개념인 Xor까지 공부해보자. Xor는 Exclusive Or의 약자로, Or와 유사한 듯 하지만 중요한 점은 두 입력값이 모두 True라면 출력은 False가 된다. 이렇게만 얘기하면 간단하지만 어떻게 그렇게 작동하는지의 로직은 약간 복잡하다. 

앞서 봐둔 기호들을 사용하였다. 

먼저 입력값 두가지를 각각 And, Or 게이트로 보낸다.

And에서 나오는 값은 Not 게이트를 통해 뒤바뀔 것이다.

이 값과 Or에서 나오는 값을 And 게이트로 보내어 결과를 출력하게 된다.

예를 들어, 입력값이 모두 True라면 마지막 And 게이트에서 받게 되는 값은 하나의 False와(Not 게이트를 거친 값) 하나의 True이기 때문에 False를 반환하는 것이다. 

입력값 중 하나가 False라면 Not 게이트는 False를 입력받아 True를 출력하고 Or 게이트도 True를 출력할테니 최종적으론 True가 출력된다.

입력값이 모두 False라면 멀리갈 것도 없이 False겠지.

그래서 입력값에 따른 출력값은 다음과 같다.

 

Xor의 추상화된 기호는 아래와 같다.