변수 교환을 위해 XOR 사용

4325 단어 algorithms


이번 달 초에 저는 우리 회사에 입사하고 싶은 인턴을 인터뷰할 기회가 주어졌습니다. 인터뷰 대상자 중 한 명이 정말 눈에 띄었습니다. 면접관 동료가 그에게 변수 값을 전환하는 방법을 물었을 때 우리는 그가 +-와 같은 일반적인 수학 피연산자를 사용할 것이라고 예상했습니다.

variable_1 = 10
variable_2 = 50
print("=========BEFORE SWITCH=========")
print("variable_1: ", variable_1)
print("variable_2: ", variable_2)

variable_1 = variable_1 + variable_2
variable_2 = variable_1 - variable_2
variable_1 = variable_1 - variable_2

print("=========AFTER SWITCH=========")
print("variable_1: ", variable_1)
print("variable_2: ", variable_2)


그러나 대신에 그는 XOR 함수를 사용했습니다. 그가 기본적으로 작성한 코드는 다음과 같습니다.

variable_1 = 10
variable_2 = 50
print("=========BEFORE SWITCH=========")
print("variable_1: ", variable_1)
print("variable_2: ", variable_2)

variable_1 = variable_1 ^ variable_2
variable_2 = variable_1 ^ variable_2
variable_1 = variable_1 ^ variable_2

print("=========AFTER SWITCH=========")
print("variable_1: ", variable_1)
print("variable_2: ", variable_2)


결과:

=========BEFORE SWITCH=========
variable_1: 10
variable_2: 50
=========AFTER SWITCH=========
variable_1: 50
variable_2: 10


그래서 XOR이 무엇이며 어떻게 작동하는지 생각하게 되었습니다.

나는 당신이 이미 XOR에 대해 들었거나 배웠다고 확신합니다. 그러나 나는 당신이 그것에 대해 이미 잊어 버렸을 것이라고 확신합니다. 기초부터 다시 한번 배워봅시다!

독점 또는



XOR 또는 Exclusive Or는 매개변수가 다르면 값 1을 반환하고 매개변수가 같으면 0을 반환하는 논리 게이트입니다.

XOR을 다음과 같이 시각화할 수 있습니다.

Exclusive Or의 벤다이어그램

배타적이거나 테이블에서 나타낼 수도 있습니다.

| A | B | Result |
|---|---|--------|
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |


Exclusive Or로 변수 바꾸기



이제 독점 또는 문자열 "ab"및 "ba"를 수행해 보겠습니다.

"ab"를 이진법으로 다음과 같이 나타낼 수 있습니다. 01100001 01100010
"ba"의 경우 다음과 같이 이진법으로 표현할 수도 있습니다. 01100010 01100001
따라서 Exclusive 또는 01100001 01100010 ^ 01100010 01100001를 수행하면 결과는 11111100 1111100가 됩니다. 둘 다 배타적이거나 동일한 값을 생성합니다. 기본적으로 "a"와 "b"사이에 배타적 또는 두 번 수행했기 때문입니다.

이제 배타적 또는 "ab"와 새 바이너리 사이를 시도하고 결과가 무엇인지 봅시다.
01100001 01100010 ^ 11111100 1111100 = 01100010 01100001
당신은 아마 이것을 이미 짐작했을 것입니다. 예, 결과는 새 바이너리를 만드는 데 사용한 문자열인 "ba"입니다.

이전 예제에서는 길이가 2인 문자열과 2개의 문자만 사용했습니다. 길이가 더 길고 문자가 더 다양한 문자열에 이 방법을 사용할 수 있습니까? 해 봅시다.

variable_1 = "안녕하세요"= 01101000 01101111 01110111 00100000 01100001 01110010 01100101 00100000 01111001 01101111 01110101
variable_2 = "안녕하세요, 세계"= 01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100
독점 또는 그들과 함께하면 다음을 얻을 수 있습니다. 00000000 00001010 00011011 01001100 00001110 01010010 00010010 01001111 00001011 00000011 00010001


예, 여전히 작동합니다. variable_1과 Exclusive Or 결과 사이에 독점 또는을 수행하려고 하면 variable_2가 됩니다. 마찬가지로 variable_2와 그 결과 사이에 exclusive or를 하려고 하면 variable_3이 됩니다.


참조



https://en.wikipedia.org/wiki/Exclusive_or#:~:text=Exclusive%20or%20or%20exclusive%20disjunction,%E2%8A%95%2C%20%E2%86%AE%2C%20and%20%E2%89%A2 .
https://en.wikipedia.org/wiki/XOR_gate

좋은 웹페이지 즐겨찾기