为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕娘9325324 2021-11-07 20:09:21
我正在尝试用 XOR 操作交换 2 个变量。int a = 5;int b = 4;a ^= b ^= a ^= b;这段代码适用于 Objective-C 和 C++,但不适用于 C# 和 JavaScript,我无法理解原因。
查看完整描述

2 回答

?
米琪卡哇伊

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。


查看完整回答
反对 回复 2021-11-07
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

尝试使用


a ^= b;

b ^= a;

a ^= b;

链式赋值混淆了 C# 和 JS


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信