按位运算查询只出现一次的数字

按位运算符包括了 “&”, “|”, “^”之类的

“&”的作用举栗:

5&6
5和6的二进制分别是101和110,那么5&6的意思是在相同位置上的两个数字相同,那么计算结果的相同位置就是1,不同则为0
所以5&6=101&110=100=4

“|”的作用举栗:

|是或运算符,5|6=7
解析:
5和6的二进制分别是101和110,那么5|6的意思是在相同位置上的两个数字其中有一个是1,那么计算结果的相同位置就是1,否则为0
所以5&6=101&110=111=7

“^”的作用举栗: 

^是异或运算符,5^6=3
解析:
5和6的二进制分别是101和110,那么5^6的意思是在相同位置上的两个数字如果相同,那么计算结果的相同位置就是0,否则为1,跟&运算符恰好相反
所以5&6=101&110=011=3

运算符介绍完毕

而此次遇到的问题是怎么在一组数中找出某个非成对的数值,如:从[3,4,6,8,9,8,4,3,6],中找到非成对的9?

看看刚介绍的运算符,或许已经能想到方法了

这儿用到的是异或运算符^

两个相同数的二进制通过^计算后值为0

那么直接循环

nums_count, nums = 0, [3,4,6,8,9,8,4,3,6]
for nums_index in nums:
    nums_count ^= nums_index
print(nums_count)

结果显示nums_count = 9 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值