如果以奇怪的方式提问,我深表歉意,这是我第一次在这里提问。在交换两个变量时,我在谷歌搜索后遇到了这一行:
x = x^i^(i = x);
在上下文中,我有两个整数,i 和 x,这一行交换了它们的值。我一直试图理解这背后的逻辑,但我不太明白。我最接近的是意识到,在数学尺度上,它们是相等的。把它扔进一个在线计算器显示两边都等于 x。我能想到的最接近的事情是:
(i = x) 是假的,所以它是零?
所以 i^0 是 1
所以 x = x^1
但即便如此,我仍然无法理解这是如何交换两个数字的。
混乱可能来自运营商。小帽子 ^ (circumflex) 是 XOR,而不是指数。
括号内的语句 i = x 将 x 的值赋给 i。同时,该语句返回值 x 以供进一步使用。因此,在将值赋给 i 之后,公式的其余部分是 x^i^x,其中 x XOR x 消除了自身,因此 x = i 仍然存在。
但是:我不明白为什么有人会想要使用它,如果您可以使用一种更易于理解的方式来使用临时变量:
int tmp = i;
i = x;
x = tmp;
Run Code Online (Sandbox Code Playgroud)