查看: 1208| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 371. Sum of Two Integers【python】

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
咨询一下最后一步a=~(a^0xFFFFFFFF)的原理是啥比较模糊
我里面的解释估计哪有问题
谢谢
  1. class Solution:
  2.     def getSum(self, a: int, b: int) -> int:
  3.         while b!=0:
  4.             a,b=(a^b)&0xffffffff,((b&a)<<1)&0xffffffff
  5.         if a>=0x7fffffff:
  6.             # a=(-2**31)|(a&0x7FFFFFFF)
  7.             a=~(a^0xFFFFFFFF)
  8.         return a
  9.     '''
  10.         a=-1,b=-2  求a+b , 32位用8位表示
  11.             源码         反码         补码
  12.        a  1000 0001   1111 1110    1111 1111
  13.        b  1000 0010   1111 1101    1111 1110
  14.       -3  1000 0011   1111 1100    1111 1101
  15.         step1:
  16.            a=(a^b)&0xffffffff       :  0000 0001
  17.            b=((b&a)<<1)&0xffffffff  :  1111 1100
  18.         step2:
  19.            a=(a^b)&0xffffffff       :  1111 1101
  20.            b=((b&a)<<1)&0xffffffff  :  0000 0000

  21.         跳出循环:
  22.            a=1111 1101 (4294967293)
  23.            a=~(a^0xFFFFFFFF) (-3)?
  24.         
  25.         a              :1111 1101 (4294967293)
  26.         0xFFFFFFFF     :1111 1111
  27.         (a^0xFFFFFFFF) :0000 0010
  28.         ~(a^0xFFFFFFFF):1111 1101 (-3) (和上面a的值区别在哪?)
  29.    
  30.     '''
复制代码



上一篇:leetcode执行出错是什么情况
下一篇:刷题刷得我不想刷了……
全局:
因为python没有溢出,int可以到无限大,这个表达式就类似于cast到32位的int上面了。也可以写成这样。
  1. if x > 0x7fffffff:
  2.     x = x - 4294967296
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表