在 C#/JS 中的一行中用 XOR 交换 2 个变量

我正在尝试用 XOR 操作交换 2 个变量。


int a = 5;

int b = 4;

a ^= b ^= a ^= b;

这段代码适用于 Objective-C 和 C++,但不适用于 C# 和 JavaScript,我无法理解原因。


慕娘9325324
浏览 174回答 2
2回答

米琪卡哇伊

与 C#/Javascript 相比,这与 C/C++ 处理操作赋值(+=、^= 和其他)运算符的方式略有不同有关。在 Javascript 中,被分配的变量在语句完成之前不会改变值。为了简化数学,假设我们在 Javascript 中有以下代码:var a = 5;var b = 4;a += b += a += b;在 javascript 中,这会设置 a = 18 (a = 5 + 4 + 5 + 4) 和 b = 13 (b = 5 + 4 + 4)。这是因为在整个语句完成之前没有变量更改值。相反,在 C/C++ 中,当 += 的每个子表达式发生时,变量赋值就会发生。考虑相应的 C 代码:int a = 5;int b = 4;a += b += a += b;这给出了 a = 22,其获得方式如下: 首先计算表达式的最后一部分 a += b。这导致值为 9。然后计算 b+= 9,给出 b = 13。然后计算 a+= 13 给出 a = 22。b 的值是 13。

拉丁的传说

尝试使用a ^= b;b ^= a;a ^= b;链式赋值混淆了 C# 和 JS
打开App,查看更多内容
随时随地看视频慕课网APP