일전에 덧셈과 뺄셈으로 두 변수의 값을 바꾸는 것을 올렸었다.(http://www.tibyte.kr/95)

이 방법은 연산과정에서 데이터형의 비트수를 넘어가면 오버플로우가 발생할 수 있는데,

다음과 같이 비트XOR(배타적논리합)연산을 쓰면 오버플로가 일어날 일이 없다.


a = a^b;

b = a^b;

a = a^b;


//한 줄로 쓰면

a ^= b ^= a^= b;


배타적 논리합 연산이므로 1행에서 a와 b의 각 자리의 비트열 차이(같은지 다른지)에 대한 정보가 a에 할당된다.

2행에서 b 우측의 항은 결과적으로 a^b^b 연산이 되어 a값이 들어간다.

3행이 처리될 때 a는 a^b 이고 b는 초기의a값이므로 a^b^a가 되어 b값이 들어가게 된다.

이렇게 a와 b의 값이 서로 바뀌게(swap) 되는 것이다.



==========================




 

+ Recent posts