码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode刷题】不使用+-的加减法:妙解

时间:2019-12-16 09:30:25      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:技术   res   img   etc   有符号   角度   mic   back   tps   

技术图片

   

加法器,只使用异或和与操作即可完成。在这个题目里,因为服务器程序编译的时候使用了 AddressSanitizer 工具,会对有符号数的左移位操作做保护,强制转成无符号数做移位可绕过。

有几个关键的点,有符号和无符号数。

  • 符号对加减的结果不产生任何影响。至于是解释成负数还是正数,取决于你怎么解读。比如 0xffffffff,你可以认为它是 int 类型的 -1,也可以认为它是 unsigned int 类型的 0xffffffff.
  • 符号位会影响:类型转换时的符号拓展操作、移位操作、大小比较的结果。从汇编指令的角度看,这几种汇编指令都区分了有符号和无符号版本的指令。(大小比较借助cmp 指令,cmp 指令本身不区分符号位,但是它会影响标志寄存器。如果你要比较结果,有符号和无符号看的 flag 位是不一样的)

       

    来自 <https://leetcode-cn.com/problems/sum-of-two-integers/comments/>

【LeetCode刷题】不使用+-的加减法:妙解

标签:技术   res   img   etc   有符号   角度   mic   back   tps   

原文地址:https://www.cnblogs.com/xukaiae86/p/12047324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!