Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 세 번째 변수 없이 두 변수의 값 교환하기


다음은 두 변수의 값을 서로 맞바꾸는(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;

동작 원리

복합 대입 연산자는 오른쪽에서 왼쪽으로 평가되므로, 위 문장은 다음과 같은 순서로 실행됩니다.

  1. a = b - a : 먼저 두 값의 차이가 계산되어 a에 저장됩니다.
  2. b -= a : b에서 새로운 a(두 값의 차이)를 빼면 결과적으로 b에는 원래 a의 값이 들어갑니다.
  3. 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 연산이나 임시 변수를 사용하는 방식이 더 안전한 대안으로 고려되기도 합니다.