我正在尝试用 XOR 操作交换 2 个变量。int a = 5;int b = 4;a ^= b ^= a ^= b;这段代码适用于 Objective-C 和 C++,但不适用于 C# 和 JavaScript,我无法理解原因。
2 回答
![?](http://img1.sycdn.imooc.com/54585050000156a302200220-100-100.jpg)
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
与 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。
- 2 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消