[C언어] 변수를 사용하지 않고 두 정수의 값 바꾸는 방법

ET의 공부/C언어|2020. 8. 3. 19:59

안녕하세요. 

 

흔히 두 변수 a,b의 값을 바꿀때 temp변수를 사용해서 바꾸곤 합니다.

 

ex) 

 

temp = a;

a = b;

b = temp;

 

하지만 이번 포스팅에서는 중간 변수를 사용하지 않고 두 정수의 값을 바꾸는 방법에 대해 포스팅해보겠습니다.

 

방법 1. 덧셈,뺄셈이용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
#include <stdio.h>
 
 
int main()
{
    int a = 99;
    int b = 22;
    
    a = a+b;
    b = a-b;
    a = a-b;
    printf("a: %d b: %d\n",a,b);
    return 0;
}
 

위의 10~12열의 연산대신해

a = (a + b)-(b = a); 을 사용해도 무방합니다.

 

 

방법 2. 곱셈,나눗셈 이용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
 
int main()
{
    int a = 99;
    int b = 22;
    
    a = a*b;
    b = a/b;
    a = a/b;
    
    printf("a: %d b: %d\n",a,b);
    return 0;
}
 

 

덧뺄셈이 아닌 곱/나눗셈으로도 두 변수의 교환이 가능합니다. 

이또한 단항식으로 a = (a * b) / (b = a); 로 표현 가능합니다.

다만 곱,나눗셈이므로 a,b가 0인경우는 교환이 되지 않습니다.

 

또한 1,2 방법은 덧셈,곱셈을 하므로 산술오버플로우가 일어나는 큰 값에는 적합하지 않습니다.

 

방법 3. XOR 이용

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
 
int main()
{
    int a = 99;
    int b = 22;
    
    a = a^b;
    b = a^b;
    a = a^b;
    
    printf("a: %d b: %d\n",a,b);
    return 0;
}
 

 

이상으로 중간 변수없이 두 값을 교환하는 방법에 대해 알아봤습니다.

 

감사합니다.

댓글()