关于位运算中“异或”使两变量交换的解释

知识点:异或运算交换两变量

a^=b^=a^=b;

看到代码时有点懵。
慢慢分析……
因为赋值运算从右到左。
a^=b; 等同于 a=a^b;

b^=a;等同于 b=b^a;b=b^(a^b);b=b^a^b=b^b^a=0^a=a
(一个数和自己异或永远为0,而0和任何数异或,都等于这个数)
以上完成了:把a的值给了b

a^=b; 等同于 a=a^b;a=a^(b^a)=a^b^a=a^a^b=0^b=b
以上的b^a来源于第二行代码。因此实现了a、b互换的功能。

猜你喜欢

转载自blog.csdn.net/admiumiu/article/details/107364150