기본적인 논리연산(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로 만들기
댓글