注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
咨询一下最后一步a=~(a^0xFFFFFFFF)的原理是啥比较模糊
我里面的解释估计哪有问题
谢谢
- class Solution:
- def getSum(self, a: int, b: int) -> int:
- while b!=0:
- a,b=(a^b)&0xffffffff,((b&a)<<1)&0xffffffff
- if a>=0x7fffffff:
- # a=(-2**31)|(a&0x7FFFFFFF)
- a=~(a^0xFFFFFFFF)
- return a
- '''
- a=-1,b=-2 求a+b , 32位用8位表示
- 源码 反码 补码
- a 1000 0001 1111 1110 1111 1111
- b 1000 0010 1111 1101 1111 1110
- -3 1000 0011 1111 1100 1111 1101
- step1:
- a=(a^b)&0xffffffff : 0000 0001
- b=((b&a)<<1)&0xffffffff : 1111 1100
- step2:
- a=(a^b)&0xffffffff : 1111 1101
- b=((b&a)<<1)&0xffffffff : 0000 0000
- 跳出循环:
- a=1111 1101 (4294967293)
- a=~(a^0xFFFFFFFF) (-3)?
-
- a :1111 1101 (4294967293)
- 0xFFFFFFFF :1111 1111
- (a^0xFFFFFFFF) :0000 0010
- ~(a^0xFFFFFFFF):1111 1101 (-3) (和上面a的值区别在哪?)
-
- '''
复制代码
|