다음은 두 변수의 값을 서로 맞바꾸는(swap) 방법을 보여주는 예제입니다.
예제
#include <stdio.h>
int main() {
int a,b;
printf("Enter the value of a : ");
scanf("%d", &a);
printf("\nEnter the value of b : ");
scanf("%d", &b);
a += b -= a = b - a;
printf("\nAfter Swapping : %d\t%d", a, b);
return 0;
}
실행 결과
Enter the value of a : 23 Enter the value of b : 43 After Swapping : 4323
위 프로그램에서는 두 개의 변수 a와 b를 선언한 뒤, 실행 시간에 사용자로부터 값을 입력받아 초기화합니다.
int a,b;
printf("Enter the value of a : ");
scanf("%d", &a);
printf("\nEnter the value of b : ");
scanf("%d", &b);
그런 다음, 세 번째(임시) 변수를 전혀 사용하지 않고 단 한 줄의 연산만으로 두 숫자의 값을 서로 바꿉니다.
a += b -= a = b - a;
동작 원리
복합 대입 연산자는 오른쪽에서 왼쪽으로 평가되므로, 위 문장은 다음과 같은 순서로 실행됩니다.
a = b - a: 먼저 두 값의 차이가 계산되어 a에 저장됩니다.b -= a: b에서 새로운 a(두 값의 차이)를 빼면 결과적으로 b에는 원래 a의 값이 들어갑니다.a += b: 마지막으로 a에 b(원래 a의 값)를 더하면 a에는 원래 b의 값이 저장됩니다.
예를 들어 a = 23, b = 43일 때를 살펴보면 다음과 같습니다.
- a = 43 - 23 = 20
- b = 43 - 20 = 23 (원래 a의 값)
- a = 20 + 23 = 43 (원래 b의 값)
이처럼 산술 연산만 활용하면 임시 변수 없이도 두 변수의 값을 간단히 교환할 수 있습니다. 다만 중간 계산 과정에서 정수 오버플로우가 발생할 수 있으므로, 값의 범위가 큰 경우에는 주의해야 하며 실무에서는 XOR 연산이나 임시 변수를 사용하는 방식이 더 안전한 대안으로 고려되기도 합니다.