异或在计算机领域的应用实例
2016-10-28 本文已影响103人
handSomeJoe
性质
· 交换律:a xor b = b*a
· 结合律:a xor b xor c = a xor (b xor c)
· 自反性:a xor b xor a = b
应用一
在编程的时候,我们常会遇见两个数的互换。在此当中,我们往往会想到一个tmp来传递互换的数值,这样相当于多了一个变量。因此,我们寻求一种方式,不用tmp,直接对两个数进行互换:
a = a xor b
b= b xor a
a = a xor b
应用二
熟悉计算机组成的同学都应该对RAID有一定的了解,RAID的第3~6级的冗余就是异或的应用之一。假设有一个5磁盘的阵列,x0到x3保存数据,x4是奇偶校验盘,对于任意一位:
x4 = x3 xor x2 xor x1 xor x0
假设x1盘损坏,我们可以做如下运算:
x4 xor x1 xor x4 = x3 xor x2 xor x0 xor x1 xor x4 xor x1
x1 = x4 xor x3 xor x2 xor x0
因此损坏的数据就可以重新生成。
应用三
有一道算法题也是很好的一个运用实例。有两个元素均为整数的数组,两个数组唯一的区别是数组二比数组一多一个数字,这个数字是数组中出现过的。问题是用什么方法可以只遍历一遍这两个数组,从而得到多出来的那个数字:
t1 = a(0) xor a(1) xor a(2) xor a(3) ....... xor a(n)
t2 = a(0) xor a(1) xor a(2) xor a(3) ....... xor a(n) xor a(n+1)
result = t1 xor t2
result 就是所求的那个数字。