A+B的问题

一.问题描述:给出两个整数a和b,求他们的和

二.问题说明

a和b都是 32位 整数么?

是的

我可以使用位运算符么?

当然可以

样例

如果 a=1 并且 b=2,返回3。

挑战

显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)

三.思路:

和sum其实就是x XOR y的结果。而进位carry恰好是x AND y的结果

1.通过对x和y进行&位运算,得出每一位上的进位。

2.对x和y进行^位运算,得出没有加进位的和。

3.将所得的和当做新的x,所得的进位往左移一位(第零位的进位输入为0)当做新的y,继续做上面的步骤,直到进位为0。

此时x中保存的就是x和y的和了。

但是要注意:若a+b正好为0,用位运算就陷入循环...

四.参考:


def aplusbt(a, b):

    if a == 0:

        return b

    if b == 0:

        return a

    if a+b == 0:

        return 0

    while (b != 0):

        _a= a ^ b

        _b= (a & b)<< 1

        a= _a

b= _b

return a


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,109评论 0 2
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,635评论 0 13
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,271评论 0 38
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,168评论 0 2
  • 可能很多人在文章中看到我们的自己的影子。 从留守儿童到空巢老人,再到今天的空巢青年,社会的苦难似乎向一代又一代的人...
    米苏和旧时光阅读 260评论 0 4

友情链接更多精彩内容