C#에서 한 줄로 두 변수 값 교환하기
두 변수의 값을 서로 맞바꾸는(swap) 작업은 보통 임시 변수(temp)가 필요하지만, 비트 XOR 연산자(^)를 활용하면 단 한 줄의 코드로 교환할 수 있습니다.
val1 = val1 ^ val2 ^ (val2 = val1);
동작 원리
C#은 식을 왼쪽에서 오른쪽으로 평가합니다. 위 코드의 실행 순서는 다음과 같습니다.
① 먼저 val1과 val2의 현재 값으로 XOR 연산이 준비됩니다.
② 이어서 괄호 안의 대입식 (val2 = val1)이 평가되어 val2에 val1의 원래 값이 저장되며, 이 대입식 자체는 val1의 원래 값을 반환합니다.
③ 최종적으로 val1 = (val1 ^ val2) ^ val1의원래값이 되고, XOR의 성질(a ^ b ^ a = b)에 의해 val1에는 val2의 원래 값이 저장됩니다.
초기 값 설정
예제에서 사용된 초기 값은 다음과 같습니다.
int val1 = 30; int val2 = 60;
전체 예제 코드
아래는 C#에서 두 변수를 한 줄로 교환하는 완전한 예제입니다.
using System;
class Demo {
public static void Main(String[] args) {
int val1 = 30;
int val2 = 60;
Console.WriteLine("Values before swap");
Console.WriteLine(val1);
Console.WriteLine(val2);
val1 = val1 ^ val2 ^ (val2 = val1);
Console.WriteLine("Values after swap");
Console.WriteLine(val1);
Console.WriteLine(val2);
}
}실행 결과
Values before swap 30 60 Values after swap 60 30
참고 사항
XOR 교환 기법은 임시 변수 없이 값을 바꿀 수 있다는 장점이 있지만, 코드의 의도를 한눈에 파악하기 어려워 가독성이 떨어질 수 있습니다. 실무 환경에서는 임시 변수를 사용하거나, C# 7.0부터 지원되는 튜플 교환 방식인 (val1, val2) = (val2, val1);을 사용하는 것이 더 명확하고 안전한 선택입니다.