>백엔드 개발 >C++ >세 번째 변수를 사용하지 않고 변수 값을 바꾸는 방법은 무엇입니까?

세 번째 변수를 사용하지 않고 변수 값을 바꾸는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-12 18:36:10570검색

How to Swap Variable Values Without Using a Third Variable?

세 번째 변수 없이 변수 값 바꾸기

전형적인 면접 질문 중 하나는 세 번째 변수를 임시 저장 공간으로 사용하지 않고 두 변수의 값을 바꾸는 방법입니다. . 일반적으로 이는 다음과 같이 임시 변수를 사용하여 수행됩니다.

temp = a;
a = b;
b = temp;

그러나 이 접근 방식에는 추가 메모리 할당 및 조작이 필요합니다. 대체 솔루션은 XOR 스왑 알고리즘을 사용하는 것입니다.

XOR 스왑 알고리즘

XOR 스왑 알고리즘은 배타적 OR(XOR) 연산을 활용하여 작동합니다. XOR 연산자에는 XOR a는 항상 0을 반환하고 XOR b는 b가 0이면 a를 반환하고 a가 0이면 b를 반환하는 속성이 있습니다.

이 속성을 사용하면 두 변수의 값을 바꿀 수 있습니다. x와 y는 다음과 같습니다.

// XOR swap function
void xorSwap(int* x, int* y) {
    if (x != y) { //ensure that memory locations are different
       *x ^= *y;
       *y ^= *x;
       *x ^= *y;
    }
}

이유는 무엇인가요? 작동:

  1. 메모리 위치 확인: 먼저 x와 y의 메모리 위치가 다른지 확인합니다. 동일한 메모리 위치를 공유하면 스왑이 작동하지 않기 때문에 이는 필수적입니다.
  2. XOR 연산: 그런 다음 다음 XOR 연산을 순서대로 수행합니다.

    • *x ^= *y: *x를 *x XOR *y로 설정합니다.
    • *y ^= *x: *y를 *y XOR *x로 설정합니다. 이는 *x XOR *x가 0이므로 *x입니다.
    • *x ^= *y: 마지막으로 *x를 *x XOR로 설정합니다. *y, 이는 *x XOR *x가 0이므로 *y입니다.

이러한 연산의 결과로 *x는 이제 *y에는 원래 값 *y가 포함되고 *y에는 *x의 원래 값이 포함됩니다.

코드 예

다음은 XOR 스왑 알고리즘을 사용하는 방법에 대한 예입니다. C:

#include <stdio.h>

int main() {
    int a = 10;
    int b = 15;

    printf("Before swap: a = %d, b = %d\n", a, b);

    xorSwap(&a, &b);

    printf("After swap: a = %d, b = %d\n", a, b);

    return 0;
}

출력:

Before swap: a = 10, b = 15
After swap: a = 15, b = 10

고려 사항

XOR 스왑 알고리즘은 효율적이고 세 번째 변수가 필요하지 않지만 항상 그런 것은 아닙니다. 가장 최적의 솔루션. 대부분의 경우 컴파일러는 임시 변수를 사용하는 보다 전통적인 방법을 사용하여 코드를 최적화합니다. 따라서 XOR 스왑 알고리즘을 사용하기 전에 프로그램의 특정 요구 사항을 고려하는 것이 중요합니다.

위 내용은 세 번째 변수를 사용하지 않고 변수 값을 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.