본문 바로가기
programming language/C

C/C++ 매크로를 사용한 정수 타입 swap

by __observer__ 2016. 2. 19.
반응형

C/C++ 코딩 시 변수끼리 값을 바꾸고 싶은 경우들이 있습니다.

 

이를 보통 변수 swap 이라고 하는데

 

a, b 라는 두 변수간에 값을 바꾸기 위해서는 보통 하나의 변수가 더 필요 합니다.

 

temp 라는 하나의 변수를 더 써서 다음과 같이 변경하는 게 일반적이죠. 비트 연산을 하지 않는 실수 타입들은 아래 방식으로 하는 게 맞을 겁니다.

 

temp = a;

a= b;

b= temp;

 

하지만 정수 타입의 경우 비트 연산을 이용하여 temp 라는 추가적인 변수 없이 swap 이 가능 합니다.

 

아래와 같이 Exclusive OR 연산을 세 번 사용하면 변수끼리 값을 바꿀 수 있습니다.

 

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

 

위 매크로에 대해 다음과 같이 테스트 해 봤습니다.

 

#include <iostream>

using namespace std;

 

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

int main()

{

    int x = 10;

    int y = 5;

    SWAP(x, y)

    cout << "x=" << x << " y= " << y << endl;

    return 0;

}


결과는 다음과 같이 x, y 값이 바뀐 것을 확인 할 수 있습니다.


x=5, y= 10



반응형

'programming language > C' 카테고리의 다른 글

C 언어 fgets() 함수를 활용한 파일 입력 받기  (0) 2016.03.02
C/C++ 비트연산 매크로  (0) 2015.03.31
Windows 에서 GCC 및 boost 사용하기  (0) 2014.07.20
C/C++ Directory File Listing  (0) 2014.07.20
C++ file path 나누기 SplitPath  (0) 2014.07.18
C++ range based for loops  (0) 2014.03.02
C++ Cartesian Product  (0) 2014.03.01
C++ XML parser pugixml  (4) 2014.02.09

댓글