暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

(小技巧)使用异或运算做交换

EffectiveCoding 2016-11-20
788

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

int num=0;

num=a;

a=b;

b=num;


有没有试过这样呢

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;)效率高的多。


文章转载自EffectiveCoding,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论