[wiki:Home 대문] / [wiki:CategoryProgramming 프로그래밍] / [wiki:SwapInteger 2개의 정수형 변수의 값을 교환(Swap)하는 방법] ---- == [wiki:SwapInteger 2개의 정수형 변수의 값을 교환(Swap)하는 방법] == * 작성자 조재혁([mailto:minzkn@minzkn.com]) * 고친과정 2007년 6월 1일 : 처음씀 === 시작하기전에 === 프로그래밍을 하다가 보면 두개의 변수의 값을 교환해야 하는 경우가 있습니다.[[br]] 프로그래머들 각각 저마다 선호하는 방법이 있을겁니다.[[br]] 그 방법중에서 제가 이용하는 방법들을 아래에 정리해봤습니다. 각기 장단점이 있으나 성능상의 큰 차이는 거의 무시할 정도라는 점에서 어떤것이 최고라고 단언할수는 없을것 같습니다. === 첫번째, 임시저장영역을 이용한 방법 === 임시 변수를 이용하여 두개의 변수를 교환하는 가장 보편적이고 직관적인 방법중에 하나인데 반드시 정수형 변수일 필요는 없고 대부분의 변수형에 적용될수 있는 방법이라는 점이 장점이나 임시 저장영역이 필요하다는것이 단점입니다. {{{#!enscript c void mzswap_1(int *s_left, int *s_right) { int s_temp; s_temp = *s_left; *s_left = *s_right; *s_right = s_temp; } }}} === 두번째, 덧셈과 뺄셈을 이용하는 방법 === 덧셈과 뺄셈의 연산만으로 두개의 변수를 교환하는 방법입니다. 직관성은 다소 떨어지는 단점이 있으나 임시 저장영역이 필요없다는 것이 장점입니다. {{{#!enscript c void mzswap_2(int *s_left, int *s_right) { *s_left += *s_right; *s_right = *s_left - *s_right; *s_left -= *s_right; } }}} === 세번째, XOR 논리연산을 이용하는 방법 === XOR 논리 연산만으로 두개의 변수를 교환하는 방법입니다. 직관성은 떨어지는 단점이 있으나 비교적 연산이 가벼우며 임시저장영역이 필요없다는 것이 장점입니다. {{{#!enscript c void mzswap_3(int *s_left, int *s_right) { *s_left ^= *s_right; *s_right ^= *s_left; *s_left ^= *s_right; } }}}