关于异或运算交换值及其中的bug

或许有很多同学会喜欢使用

a = a^b;

b= b^a;

a= a^b;

对于不知道原理的同学,我举一个类似的例子:

a=a+b;

b=a-b;

a=a-b;

然后是其中的bug :

交换值经常会在排序中碰到,但是异或运算是比较危险的。当出现自身和自身异或的时候,结果是置0的;

既 a=a^a;

a==0;

所以用之前判断一下,再加一个三元运算符,虽然难度,但是会蛮帅的。

其次,值得一提的是,a=a^a;将a置0的效率要比 赋值运算(a=0;)效率高的多。

点赞