#############异或实现数的交换##########
a=10
b=100
a = a ^ b
b = a ^ b
a = a ^ b
#print(a,b)
########异或查找出数组中出现奇数次的数########
###########数组中只有一个数出现奇数次,其他数都出现偶数次,找出出现奇数次的数##
# li=[1,9,9,8,8,6,4,6,5,4,4,4,1,1,1]
# eor=0
# for i in li:
# eor^=i
# #print(eor)
###########数组中有两个数出现奇数次,其他数都出现偶数次,找出出现奇数次的数##
li=[1,9,9,8,8,6,4,6,5,4,4,4,1,1,1,7,7,7]
eor=0
for i in li:
eor^=i #循环一遍得到的eor=a^b(a,b为那两个出现奇数次的数)
###接下来想办法将a,b分离出来
rightone = eor & (~eor + 1) #提取出eor(二进制位)最右边的1(eg:00000010,第7位为1),方法:自身与(取反+1)作与运算
#补码与原码的计算
print(rightone)
#a与b(二进制位)在第7位上,是不同的,分别为1或者0
#设置变量eor1,将数组中所有第7位为1的元素作异或运算,出现过偶数次的数异或为0,最后结果为a或者b(因为a和b在第7位不同),最后再将eor1与eor作异或运算,得到另一个元素( a^(a^b)=b or b^(a^b)=a )
eor1 =0
for i in li:
if ( i & rightone):
eor1^=i
print( eor1, eor1^eor )
异或运算在数组查找中的应用异或实现数的交换从数组中找出出现奇数次的数(只有一个数出现奇数次,其他数出现偶数次)从数组中找出出现奇数次的数(两个数出现奇数次,其他数出现偶数次)#############异或实现数的交换##########a=10b=100a = a ^ bb = a ^ ba = a ^ b#print(a,b)########异或查找出数组中出现奇数次的数###################数组中只有一个数出现奇数次,其他数都出现偶数次,找出出现奇数次的数##