XOR 뭐 학교 같은 데선 편의상 1이 홀수 개면 1이 되고 짝수 개면 0이 되는 연산 식으로 가르쳐서

뭔가 현실성이 떨어지는 거 같은데...


다르게 바라보면 이런 관점도 가능하고 이렇게 생각하면 좀 더 와닿고 유용한 경우가 많다.


0 ⊕ 0 = 0

0 ⊕ 1 = 1

1 ⊕ 0 = 1

1 ⊕ 1 = 0


NOT 연산을 dynamic으로 확장한 연산이라는 이미지로 xor를 생각할 수도 있음.

0과 XOR하면 원래 비트가 그대로 나오고, 1과 XOR하면 원래 비트가 반전되어서 나오니까.


예를 들어 어떤 8비트 value = ABCDEFGH(2)가 있다고 치자.


이 value의 H 자리만 반대 비트로 바꾸고 싶다?

value ^= 1;


하면 된다.


예를 들어 대문자는 소문자로, 소문자는 대문자로 바꾸는 프로그램을 짠다고 해 보자.

input은 모두 로마자 알파벳이라고 가정하고.


그럼 이런 느낌으로 무분기로 짤 수 있다.



왜냐하면 아스키 코드에서 대문자(0x41~)와 소문자(0x61)는 0x20 번째 비트만 서로 다른 거기 때문이다.


프로그래밍 좀 한 사람은 당연히 다 이런 느낌 정도는 다 느끼면서 쓰겠지만... 늅늅이들한테는 많이 도움이 될 듯.