异或运算^

异或运算与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真。转化为命题,就是:“两者的值不同。”或“有且仅有一个为真。”符号为 XOR 或 EOR 或 ⊕(编程语言中常用^)。

基本性质:

1、交换律        a^b = b^a

2、结合律       (a^b)^c = a^(b^c)

3、对于任何数x,都有     x^x=0,x^0=x           (异或自身等于0,异或0等于自身)

4、自反性          A ^ B ^ B = A ^  0 = A

5、IF a ^ b = c THEN b ^ c = a

6、0和1 ^ 1 都和自身相反; 0和1 ^ 0都和自身相同

经典的用法:

1、快速比较两个数值是否相等

a == b                 a^b == 0

2、不用额外内存,交换两个数的值

a ^= b;

b ^= a;

a ^= b;

3、检验和恢复,RAID5

校验和恢复主要利用的了异或的特性:IF a ^ b = c THEN a ^ c = b 应用:一个很好的应用实例是RAID5,使用3块磁盘(A、B、C)组成RAID5阵列,当用户写数据时,将数据分成两部分,分别写到磁盘A和磁盘B,A ^ B的结果写到磁盘C;当读取A的数据时,通过B ^ C可以对A的数据做校验,当A盘出错时,通过B ^ C也可以恢复A盘的数据。

4、使用异或使某些特定位翻转

翻转10100001的第6位, 答案:可以将该数与00100000进行按位异或运算;  10100001 ^ 00100000 = 10000001

5、一个整型数组里除了N个数字之外,其他的数字都出现了两次,找出这N个数字

比如,从{1, 2, 3, 4, 5, 3, 2, 4, 5}中找出单个的数字: 1

1^2^3^4^5^3^2^4^5 = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值