有关XOR运算

XOR又称为异或运算。

运算规则为:和自己相同的数值异或运算为0,不同的为1。

异或运算满足交换律,结合律。即 a^(b^a) = b^(a^a)

由于异或运算的自反性和满足交换律、结合律,常常被用于一些技巧性较强的应用中,如面试题。下面举几个应用:

1,不用中间变量的两个变量交换数值:

void inplace_swap(int* x, int* y)

{

                       //     x                y

    *y = *x ^ *y;//    a                a^b

    *x = *x ^ *y;//   a^a^b         a^b

    *y = *x ^ *y;//  a^a^b=b     a^a^b^(a^b) = a^(a^a)^(b^b) = a^0^0 = a

}

2,编程之美中应用XOR的题目:

1.5 快速找出故障机器:找出数组中唯一不重复的元,数组可以很大。

1.11 NIM(1)

4.6 桶中取黑白球


3, 找唯一重复的数字:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,设计一种算法找出来?

利用了异或运算的交换律和结合律。


3,另外,异或运算还可应用于数据校验和数据加密。

如:网络传输中的帧数据异或结果作为一个校验值。

C=P^K其中P为明文、K为密钥、C为密文

两边同时做K的异或运算: C^K = P^K^K = P ,运用自反性解密。得到明文。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值