异或在计算机领域的应用实例

性质


· 交换律: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 就是所求的那个数字。

你可能感兴趣的:(异或在计算机领域的应用实例)