异或^的几个用处

转自http://www.cnblogs.com/danh/archive/2010/12/24/1915810.html

一、交换两个整数的值而不必用第三个参数

a = 9;
b = 11;

a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b;  0010^1001=1011

a = 11;

b = 9;

二、奇偶判断

^a操作就是将a中的每一位按位逐一进行异或,例如a=10,且1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。

三、配对性

设a为任意非负偶数,b=a+1为比a大1的正奇数,则必有a^1=b.b^1=a;

可用于处理两两配对问题。

四、运算具有不进位加法性

如1+1=0,0+0=0,1+0=1;

五、交换律,结合律,对任何数x,有x^x=0,x^0=x;

六、自反性

A^B^B=A^0=A

这是一个最重要的性质,对于给定的A,运用同样的运算因子B,两次运算后仍得到A本身,可用于数据加密传输等。

leetcode上第268. Missing Number,就是此题应用。

X=1^2^...^lost^...^n(包含丢失的那个数,设为lost)

Y=1^2^...^n(不包含lost)

则X=Y^lost,则X^Y=Y^Y^lost=0^lost=lost,大功告成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值