异或 ,题136 ,260

# 异或 x^x = 0 x^0 = x
# 异或 == 无进位相加
# 在二进制层面 相同为0 不同为1


# 题目 一类奇数  其余偶数 找奇数
eor = 0
list = [1,1,1,2,2,3,3,1,1,3,3]

for i in list:
    eor = eor^i
print('ero',eor)


# 题目 两种奇数 其余偶数 ,找奇
# & 按位 与 运算符 两个相应二进制位为1 ,则结果该位置为1, 否则结果该位置为0
eor1 = 0
list1 = [-1,0]

for j in list1:
    # eor1 = a^b != 0  ero1必然有一个位置上是1
    eor1 = eor1^j    # 相同为0 不同为1(所以最右侧位置为1时, ab该位置不同)

rightOne = eor1 & (~eor1 + 1)    # 提取出最右边1  一个数 与 取反 +1 就是取出来最右侧数

onlyOne = 0
for cur in list1:
    if cur & rightOne ==0 :  #  &->为1则1,反之则0 ; if cur & rightOne !=0 (一样)
        onlyOne ^= cur;
eor1 = eor1^onlyOne
print(eor1,onlyOne)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值