美文网首页
异或在计算机领域的应用实例

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

作者: handSomeJoe | 来源:发表于2016-10-28 23:38 被阅读103次

    性质


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

    相关文章

      网友评论

          本文标题:异或在计算机领域的应用实例

          本文链接:https://www.haomeiwen.com/subject/cbweuttx.html