▶ 논리연산의 종류
ㆍ not and or xor
- 이 4가지 종류가 있다.
1. not A
ㆍ A의 반대 (0이면 1, 1이면 0)
2. A and B
ㆍ 잘생겼고 and 키도 크고 -> 둘다 참이면 1, 아니면 0
3. A or B
ㆍ 잘생겼거나 or 키가 크거나 -> 둘중 하나라고 참이면 1, 아니면 0
4. A xor B
ㆍ 둘다 1이거나 둘다 0이면 0, 아니면 1
-> 뭔소리지? 예시를 보자
위의 숫자와 아래의 숫자의 xor을 한다고 예를 들어보자
첫 자리부터 0,1 이면 0 1,1이면 1... 이렇게 하니 이해가 된다
◆ 어셈블리 코드에서 확인
ㆍ 이제는 문법은 꽤 익숙하다.
ㆍ 내가 아는 논리연산대로 값이 출력이 되는걸 확인할 수 있다.
ㆍ 동일한 값으로 xor을 해봤다!
ㆍ 2번 진행하니 자기 자신으로 돌아오는걸 확인할 수 있다.
※ 암호학에서 유용한 이유
ㆍ 대칭 키 암호화가 가능하다, value를 key로 xor연산하여 암호문 C를 생성하고
ㆍ 이 key를 다시 xor 연산하여 원래의 value로 되돌릴 수 있다
ㆍ 마지막에 있던 요놈의 기능을 이제 알겠다. xor은 동일한 값으로 xor을 하면 무조건 0을 반환한다.
ㆍ xor rax , rax는 C++의 return 0; 과 같이 프로그램이 종료됨을 알리는 것이다
논리연산의 응용 사례
▶ bitflag란? : 비트마다 하나의 의미를 부여하는 경우가 있다.
ㆍ 각 비트를 개별적인 플래그(참/거짓)으로 사용해 여러 상태를 표현하는 기법
1. 예를들어 0000 0011 은 플레이어가 날아다닐 수 있는 상태
2. 0000 0001은 플레이어가 날 수 없는 상태
3.이런식으로 비트에다 의미를 부여하고 상태를 나누는걸 bit flag 라고 한다.
※ 장단점
장점:
ㆍ여러개의 bool 값... 더러운 bool값을 하나의 정수형 변수에 저장할 수 있으니 메모리를 절약할 수 있다
ㆍ또한 CPU에서 빠르게 처리되므로 성능이 좋다
단점:
ㆍ 가독성이 안좋다, 또한 비트수에 따라 최대 플레그 수가 제한된다 (예를들어 32비트 정수형 변수는 최대 32개)