Эта строка меняет две переменные, но как это сделать go? - PullRequest
4 голосов
/ 03 февраля 2020

Я прошу прощения, если это спрашивается странным образом, я впервые задаю вопрос здесь. Поменяв местами две переменные, я наткнулся на эту строку после поиска в Google:

x = x^i^(i = x);

В контексте у меня есть два целых числа i и x, и эта строка меняет их значения. Я пытался понять логику c, стоящую за этим, и я не могу понять это. Самое близкое, что я пришел, - это понимание того, что в математическом масштабе они равны. Бросив его в онлайн-калькулятор, вы увидите, что обе стороны равны x. Самое близкое, о чем я могу подумать:

(i = x) - ложь, так что это ноль?

, поэтому я ^ 0 равен 1

, поэтому x = x ^ 1

Но даже с этим я все еще не могу понять, как это меняет местами два числа.

1 Ответ

6 голосов
/ 03 февраля 2020

Путаница, вероятно, исходит от оператора. Крошечная шляпка ^ (диафрагма) - это XOR, а не экспонента.

Оператор i = x в скобках присваивает значение x i. В то же время этот оператор возвращает значения x для дальнейшего использования. Таким образом, после присвоения значения i, оставшаяся часть формуляра будет x ^ i ^ x, где x XOR x устраняет себя, так что x = i остается.

Однако: я не понимаю, почему кто-то будет хотите использовать это, если бы вы могли использовать более понятный способ, просто используя временную переменную:

int tmp = i;
i = x;
x = tmp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...