我正在尝试通过XOR操作交换2个变量。
int a = 5;
int b = 4;
a ^= b ^= a ^= b;
此代码可在Objective-C和C ++中使用,但不能在C#和JavaScript中使用,我无法理解原因。
答案 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)