XOR Swap

Programming/C / C++ 2015. 2. 7. 19:04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이것은 XOR 이라는 비트연산의 특성을 이용한 방법
XOR은 같은 값으로 연산을 두번 시켜주면 다시 원래대로 돌아오는 특성을 가지고 있다
예를 들어 두 값 A, B 가 있고 처음 XOR을 했을 때의 값을 X 라 한다면

 

A ^ B = X
X ^ B = A
X ^ A = B

 

그래서 XOR연산은 데이타 암호화의 가장 기본이 되는 연산으로 쓰이고 있다
A가 암호화할 문장, B가 암호 키, X가 암호문으로
자세한 것은 데이타 암호화를 찾아보시라

 

#define SWAP( a, b ) a ^= b; b ^= a; a ^= b;

 

이것을 부분별로 나눠보면 다음과 같다

1) 초기값 : a(A), b(B) 
2) a ^= b 가 실행된 후 : a(X), b(B) (a = a ^ b = A ^ B = X)
3) b ^= a 가 실행된 후 : a(X), b(A) (b = a ^ b = X ^ A = B)
4) a ^= b 가 실행된 후 : a(B), b(A) (a = b ^ a = X ^ B = A)

 

* XOR은 순서가 바뀌어도 상관없다 A ^ B = B ^ A

하지만 위와 같이 데이타 타입이 없는 경우 조금 위험하게 쓰일 수도 있으니 차라리 inline을 쓰는 것이 좋다
#define은 타입체킹을 하지 않으니 서로 다른 두 타입이 들어오면 문제가 발생할 수 있다

 

template<class A, class B>
inline void Swap( A &a, B &b ) { a ^= b; b ^= a; a ^= b; }

 

* 단, 이것은 C++에서나 사용가능
   C에서는 어쩔 수 없이 위의 #define 방법을 사용해야된다.

'Programming > C / C++' 카테고리의 다른 글

__IN & __OUT  (0) 2015.02.07
strncpy 의 함정  (0) 2015.02.07
struct tm  (0) 2015.02.07
Lotto  (0) 2015.02.07
Quick Cast  (0) 2015.02.07
Posted by 역시인생한방
,