Programming/C
[Programming/C] XOR(^)를 이용한 데이터 교환
scii
2021. 1. 20. 02:29
XOR를 이용하면 손쉽게 데이터를 교환할 수 있다. 예를 들어, 연산 결과를 F라 하면 F^a 는 b가 되고 F^b는 a가 된다.
다음의 예제를 살펴보자.
#include <stdio.h>
// 매크로를 이용한 데이터 교환
#define SWAP(a, b) { a^=b; b^=a; a^=b; }
// 함수를 이용한 데이터 교환
void Swap(int* a, int* b){
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
int main(int argc, const char * argv[]) {
int a = 10;
int b = 20;
printf("a: %d, b: %d\n", a, b);
Swap(&a, &b);
printf("a: %d, b: %d\n", a, b);
SWAP(a, b);
printf("a: %d, b: %d\n", a, b);
return 0;
}
/* 결과
a: 10, b: 20
a: 20, b: 10
a: 10, b: 20
*/
a와 b를 ^ 연산하여 결과를 a에 저장하고 다시 a와 b를 ^ 연산하여 b에 저장하면 b는 10이 된다. 다시 a와 b를 ^ 연산하여 a에 저장하면 20이 되어 두 수를 교환할 수 있다.