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 번째 비트만 서로 다른 거기 때문이다.
프로그래밍 좀 한 사람은 당연히 다 이런 느낌 정도는 다 느끼면서 쓰겠지만... 늅늅이들한테는 많이 도움이 될 듯.
걍 0x20 적지 저건 무슨 취향이지...
0x20: int 타입 상수, '\x20': char 타입 상수
'x20' => '\\x20'. 디씨 덧글 필터링 극혐 ㅋㅋ
int c; while((c = getchar()) != EOF) putchar(c ^ 0x20);
이거면 끝날 예제를...
마지막 글자 웃기게 나오긴 하겠군.
저도 그렇게 짜고 싶은 마음이 굴뚝같았지만... '\\n'도 ^0x20 처리돼서 이상하게 보여요 ㅋㅋㅋ
네 ㅋㅋㅋ 그래서 if나 삼항 연산자로 별도로 분기 처리해야 하는 ㄷㄷ
while((c = getchar()) != '\n') putchar(c ^ 0x20);
됐지?
백슬래쉬 있다치고
ㄷㄷ 그 상황에선 줄바꿈 문자 없이 Ctrl+D(윈도우에선 Ctrl+Z)로 끝내면 무한루프를 돌겠군요. ㅋㅋ
무한루프 안돌아.
다시 getchar() 돌겠지
엔터 받을때까지
Ctrl+D(윈도우에선 Ctrl+Z)는 표준 입력 스트림을 닫으니까요.
http://ideone.com/uZJw4o
엔터 받으면 끝나.
getchar() 는 표준 입력 스트림을 또 여니까.
http://autogram.tk/이
중고차 어플리케이션 어떤가요?