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

时间:2018-07-31 08:23:51

标签: javascript c#

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

int a = 5;
int b = 4;
a ^= b ^= a ^= b;

此代码可在Objective-C和C ++中使用,但不能在C#和JavaScript中使用,我无法理解原因。

2 个答案:

答案 0 :(得分:2)

与C#/ Javascript相比,这与C / C ++处理op分配(+ =,^ =和其他)运算符的方式略有不同。

在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。

答案 1 :(得分:0)

尝试using

a ^= b;
b ^= a;
a ^= b;

链式分配混淆了C#和JS