320p 핵심정리
, 공 지민님이 작성int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
왜 a,b 값이 바뀐거지요?....
a ^ b XOR 계산을 하면 30이 나오는데... 어떤원리가 이용된건가요.>!!
Re: 320p 핵심정리
, 도장_ 관리자님이 작성276쪽의 표 23-2를 보면 XOR(^) 연산에 대한 표가 있습니다. 이 표와 함께 값 a, b의 2진수 패턴을 종이에 적어서 직접 적용해보면 이해할 수 있습니다. 직관으로 이해하기보단 직접 해보는 게 더 이해하기 쉽습니다.
그림 23-1에서 프로그래머용 계산기를 실행하고 10과 20을 각각 입력해서 2진수 표현(BIN 항목, BIN은 2진수를 뜻하는 BINARY의 약자)을 옮깁니다.
a = 10 = 0000 1010
b = 20 = 0001 0100
a = a ^ b를 실행하면
0000 1010
0001 0100
-----------------
0001 1110
a = 0001 1110
b = 0001 0100(변화 없음)
두 번째 b = a ^ b를 실행하면
a = 0001 1110
b = 0001 0100
-----------------
0000 1010
a = 0001 1110(변화 없음)
b = 0000 1010
세 번째 a = a ^ b를 실행하면
a = 0001 1110
b = 0000 1010
------------------
0001 0100
a = 0001 0100
a = 0000 1010 = 10
b = 0001 0100 = 20
a = 0001 0100 = 20
b = 0000 1010 = 10
두 값이 바뀐 결과가 되었습니다.
수학적인 증명은 수학에 대한 기초지식이 필요합니다. 수학적인 증명은 위키피디아에 설명되어 있습니다.
XOR 교체 알고리즘의 증명 부분을 참고하세요.