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

Posted 拓海藤原

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题不使用+-的加减法:妙解相关的知识,希望对你有一定的参考价值。

   

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

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

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

       

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

以上是关于LeetCode刷题不使用+-的加减法:妙解的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题最长同值路径:妙解

LeetCode刷题NIM游戏:妙解

LeetCode刷题供暖器:妙解

LeetCode刷题机器人走路最大距离:妙解

刷题不痛快?免费送你 LeetCode PLUS 会员 + 6本好书,我的粉丝都可以领

leetcode刷题四十七