midas+son의 크리에이티브(creative) 이야기

#include <iostream>


using namespace std;


void main()

{

unsigned short a = 0x1;      // 0001

unsigned short b = 0x5;      // 0101


cout << (a^b) << endl;   // 4 = 0100


getchar();

}


컴퓨터 관련 전공이나 전산 쪽이면 XOR는 많이 봤을 것이다.


A

B

결과 

 0

 0

 0

 0

 1

 1

 1

 0

 1

 1

 1

 0


A와 B의 입력이 있을 때 둘 중 하나만 1일 경우가 1이다 라는 것인데

이를 코드로 표현 할 일이 거의 없지만 

두개의 변수의 값을 교환 할때 사용할 수 있단 걸 알게 되었다.


이전에는

temp = a;

a = b;

b = temp;

이런식으로 별도의 동일한 자료형의 더미를 만들어 Swap을 하였으나

아래와 같이 XOR을 3번 해주고 각각 변수 A, B, A 순으로 담아주면

더미 변수 없이도 서로 값이 바뀌는 것을 결과로서 볼 수 있다.

주석의 이진 수를 참고하여 아래의 코드를 봐보자.


#include <iostream>


using namespace std;


void main()

{

int a = 127; //1111 1111

int b = 59; //0111 1011


a = a ^ b; // a = 1000 0100

b = a ^ b; // b = 1111 1111

a = a ^ b;  // a = 0111 1011


cout << a << endl;   

cout << b << endl;  



int c = 60817; //0000 0000 0000 0000 0000 1110 1101 1001 0001

int d = 201606; //0011 1011 0110 0100 0111 0001 0011 1000 0110


c = c ^ d; // c = 0011 1011 0110 0100 0111 1111 1110 0001 0111

d = c ^ d; // d = 0000 0000 0000 0000 0000 1110 1101 1001 0001

c = c ^ d;  // c = 0011 1011 0110 0100 0111 0001 0011 1000 0110


cout << c << endl;

cout << d << endl;


getchar();

}