[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;
}
|
이상으로 중간 변수없이 두 값을 교환하는 방법에 대해 알아봤습니다.
감사합니다.
'ET의 공부 > C언어' 카테고리의 다른 글
[C언어] *로 비어있는 삼각형(피라미드) 역삼각형 출력하는 방법 (0) | 2020.08.03 |
---|---|
[C언어] *로 삼각형(피라미드) 역삼각형 출력하는 방법 (0) | 2020.08.03 |
[C언어] 입력받은 만큼 * 로 빈 사각형 출력하는 방법 (0) | 2020.07.11 |
[C언어] 특정 년,월의 일수를 찾는 방법 (0) | 2020.07.10 |
[C언어] 정수의 모든 0을 1로 바꾸는 방법 (0) | 2020.07.10 |
댓글()