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

C 언어에서 비트 연산자(XOR)를 활용해 두 숫자 교환하기

C 프로그래밍에서 두 변수의 값을 맞바꾸는(swap) 방법은 여러 가지가 있지만, 그중 비트 연산자(Bitwise Operator)를 사용하면 임시 변수(temp) 없이도 간단하게 값을 교환할 수 있습니다. 이번 글에서는 XOR(^) 연산을 이용해 두 숫자를 교환하는 방법을 단계별로 살펴보겠습니다.

문제 상황

C 언어에서 비트 연산자를 사용하여 두 개의 숫자를 서로 바꾸려면 어떻게 해야 할까요?

해결 방법

컴파일러는 먼저 입력받은 10진수를 2진수(binary)로 변환한 뒤, 두 값에 대해 비트 단위 XOR 연산을 수행합니다. XOR 연산은 세 번 반복되면서 각 변수에 저장된 값이 메모리상에서 서로 교환되는 원리입니다.

XOR 연산의 핵심 성질은 다음과 같습니다.

  • 같은 비트끼리 XOR하면 0이 됩니다. (x ^ x = 0)
  • 0과 XOR하면 자기 자신이 유지됩니다. (x ^ 0 = x)
  • 교환 법칙과 결합 법칙이 성립합니다.

알고리즘

START
Step 1: 두 개의 변수 a와 b 선언
Step 2: 콘솔에서 두 개의 숫자 입력받기
Step 3: 비트 연산자(XOR)를 사용하여 두 숫자 교환
        a = a ^ b
        b = a ^ b
        a = a ^ b
Step 4: a와 b의 값 출력
STOP

프로그램 코드

#include<stdio.h>
int main(){
    int a,b;
    printf("enter the values for a and b:");
    scanf("%d%d",&a,&b);
    printf("value of a=%d and b=%d before swap\n",a,b);
    a= a^b;
    b= a^b;
    a= a^b;
    printf("value of a=%d and b=%d after swap",a,b);
    return 0;
}

실행 결과

enter the values for a and b:24 56
value of a=24 and b=56 before swap
value of a=56 and b=24 after swap

동작 원리 설명

입력값으로 a=24, b=56을 넣었을 때 내부적으로 어떻게 교환이 일어나는지 2진수로 확인해 보겠습니다.

  • a = 24 → 2진수: 011000
  • b = 56 → 2진수: 111000
  1. a = a ^ b011000 ^ 111000 = 100000
  2. b = a ^ b100000 ^ 111000 = 011000 (원래 a의 값인 24)
  3. a = a ^ b100000 ^ 011000 = 111000 (원래 b의 값인 56)

최종 결과:

  • a = 111000 → 10진수로 56
  • b = 011000 → 10진수로 24

이처럼 세 번의 XOR 연산만으로 두 변수의 값이 완벽하게 교환됩니다. 임시 변수를 사용하지 않으므로 메모리를 절약할 수 있다는 장점이 있지만, 가독성이 떨어질 수 있으므로 실무에서는 코드의 명확성을 고려해 적절히 활용하는 것이 좋습니다.