异或

原创 2014年02月20日 21:51:27

异或:按位模2加


a^b = (a+b)%2


应用


一、交换两个整数的值而不必用第三个参数
a = 9;
b = 11;

a=a^b; 1001^1011=0010
b=b^a; 1011^0010=1001
a=a^b;  0010^1001=1011

a = 11;
b = 9;


二、奇偶判断
^a操作就是将a中的每一位按位逐一进行异或,例如a=4'b1010,则b=1^0^1^0=0,由此可以判断a中为1的位数是奇数还是偶数,是一个便捷的操作。


因此,对于一些问题可以推导出模n异或

a^b = (a+b)%n


以模3为例

0^0 = 0

0^1 = 1

0^2 = 2

0^3 = 3

2^2 = 1


可用于解决leetcode中的single number II


Given an array of integers, every element appears three times except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?


对于除出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数。
用ones记录到当前计算的变量为止,二进制1出现“1次”(mod 3 之后的 1)的数位。用twos记录到当前计算的变量为止,二进制1出现“2次”(mod 3 之后的 2)的数位。当ones和twos中的某一位同时为1时表示二进制1出现3次,此时需要清零。即用二进制模拟三进制计算。最终ones记录的是最终结果。


更广泛扩展

给定一个包含n个整数的数组,有一个整数x出现b次,一个整数y出现c次,其他所有的数均出现a次,其中b和c均不是a的倍数,找出x和y。使用二进制模拟a进制,累计二进制位1出现的次数,当次数达到a时,对其清零,这样可以得到b mod a次x,c mod a次y的累加。遍历剩余结果(用ones、twos、fours...变量表示)中每一位二进制位1出现的次数,如果次数为b mod a 或者 c mod a,可以说明x和y的当前二进制位不同(一个为0,另一个为1),据此二进制位将原数组分成两组,一组该二进制位为1,另一组该二进制位为0。这样问题变成“除了一个整数出现a1次(a1 = b 或 a1 = c)外所有的整数均出现a次”,使用和上面相同的方式计算就可以得到最终结果,假设模拟a进制计算过程中使用的变量为ones、twos、fours...那么最终结果可以用ones | twos | fours ...表示。


参考:http://blog.sina.com.cn/s/blog_88c9ddc50101810p.html

                 http://blog.csdn.net/a775700879/article/details/11393885

                 http://www.cnblogs.com/daijinqiao/p/3352893.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

异或位运算加密

异或加密源代码

hdu5909 Tree Cutting - FWT 加速集合异或(*)

http://acm.hdu.edu.cn/showproblem.PHP?pid=5909 问题描述 Byteasar有一棵nn个点的无根树,节点依次编号为11到nn,其中节点i...

异或值计算

  • 2014-10-17 11:46
  • 152KB
  • 下载

4103: [Thu Summer Camp 2015]异或运算

题面:给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor  yj,每次询问给定矩形区域i∈[u,d],j...

异或运算扩展

  • 2013-01-06 15:39
  • 28KB
  • 下载

Codeforces 501C:Misha and Forest(好题+思维+异或的运算规律+树)

C. Misha and Forest time limit per test 1 second memory limit per test 256 megabytes ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)