PLAINTEXT
void inplace_swap(int *x,int *y)
{
 *y=*x^*y;
 *x=*x^*y;
 *y=*x^*y;
 }

임시 변수 없이 두 정수를 맞바꾸는 코드다. XOR 은 같은 값을 두 번 적용하면 원래대로 돌아오므로(a ^ b ^ b == a), 세 줄이 지나면 두 자리의 값이 서로 바뀐다.

한 가지 함정이 있다. x 와 y 가 같은 곳을 가리키면 첫 줄에서 *y = *x ^ *y 가 a ^ a 가 되어 0 이 되고, 그 뒤 두 줄도 모두 0 이라 값이 0 으로 날아간다. 컨테이너의 두 원소를 인덱스로 바꿀 때처럼 두 인자가 같아질 수 있는 자리에서는 먼저 걸러야 한다.

라이선스

작성자: Jaehun Ryu

링크: https://jaehun.me/posts/inplace_swap/

라이선스: CC BY 4.0

이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 출처를 밝히면 상업적 목적을 포함해 자유롭게 이용 가능합니다.

댓글