Computer Science/Computer Architecture

[컴퓨터 구조] 기본 논리 연산을 활용한 응용 논리 연산

ggyongi 2021. 10. 25. 18:06
반응형

기본적인 논리연산(AND, OR, XOR, NOT)을 안다는 가정하에

다음 네 가지를 살펴보자.

 

첫번째. 1과 OR연산하기

기존 비트가 0이었다면 0 OR 1 -> 1

기존 비트가 1이었다면 1 OR 1 -> 1

=> 무조건 1이 나온다는 것이 특징!

 

두번째. 1과 AND연산하기

기존 비트가 0이었다면 0 AND 1 -> 0

기존 비트가 1이었다면 1 AND 1 -> 1

=> 무조건 자기 자신이 나온다는 것이 특징!

 

세번째. 0과 OR연산하기

기존 비트가 0이었다면 0 OR 0 -> 0

기존 비트가 1이었다면 1 OR 0 -> 1

=> 무조건 자기 자신이 나온다는 것이 특징!

 

네번째. 0과 AND연산하기

기존 비트가 0이었다면 0 AND 0 -> 0

기존 비트가 1이었다면 1 AND 0 -> 0

=> 무조건 0이 나온다는 것이 특징!

 

위의 네가지를 정리하면 다음과 같다.

연산 종류 결과
X OR 1  1
X AND 1 X
X OR 0 X
X AND 0 0

 

이들을 적절히 조합하여 '응용 논리 연산'을 만들어낼 수 있다.

 

1. 선택적 세트: 특정 비트를 1로 세트할 수 있는 연산

방법: 그대로 놔두고싶은 위치엔 0을 넣고 1로 세팅하고 싶은 곳엔 1을 넣은 데이터를 만들어 OR 연산을 하면 된다.

A = 1001 0010이라고 하자. 

여기에 내가 원하는 위치에 1을 넣고 싶다면? 여기서는 뒤의 네 비트에 1을 넣고 싶다고 해보자. 그러면

B = 0000 1111을 만들어 OR 연산을 해주면 된다.

결과: (1001 0010) OR (0000 1111) => (1001 1111)

 

 

2. 마스크 : 특정 비트를 0으로 리셋할 수 있는 연산 

방법: 리셋하고 싶은 곳엔 0을 넣고 그대로 놔두고 싶은 곳엔 1을 넣은 데이터를 만들어 AND 연산을 하면 된다.

A = 1011 0101이라고 하자.

처음 네 비트를 0으로 만들고 싶다면?

B = 0000 1111을 만들어 AND 연산을 해주면 된다.

결과: (1011 0101) AND (0000 1111) => (0000 0101)

 

3. 삽입 : 특정 비트를 0또는 1로 만드는 연산

앞서 배웠던 선택적 세트와 마스크를 차례대로 시행하면 된다.

A = 1001 0010이라고 하자.

뒤의 네 비트는 무조건 1010이었으면 좋겠다. 어떻게 조작해야 할까?

우선 뒤의 네 비트를 전부 0으로 만들자 -> 마스크 연산이므로 (1111 0000)을 만들어 AND 연산 -> (1001 0000)

그 다음 선택적 세트 연산 -> (0000 1010)을 만들어 OR 연산

결과는? (1001 0000) OR (0000 1010) => 1001 1010

의도한대로 처음 (1001 0010)을 (1001 1010)으로 변경하였다.

 

 

**이 글에서 결국 핵심은 다음을 기억하는 것이다.

OR 1은 무조건 1로 만들기

AND 0은 무조건 0로 만들기