371. Sum of Two Integers

来源:互联网 发布:c语言 algin 编辑:程序博客网 时间:2024/06/15 20:20

原文地址:http://blog.csdn.net/u014203453/article/details/52495609
题目:Sum of Two Integers

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.Example:Given a = 1 and b = 2, return 3.

思路: 使用“与”与“异或”运算,其中按位“与”只是得到了进位信息,“异或”运算则是没有进位信息的“伪加法”。因此,要同时充分利用这两种运算求解加法运算。下面将11(二进制表示:1011)与5(二进制表示:0101)相加的运算过程如下:
(1)伪加运算结果(这里没有的进位信息的)

A101011101110

(2)计算进位(把进位计算进来)

B1000010010011110

可以看到上述与运算的进位信息应该是放在与运算为1的下一位,因此真正得到的进位结果为0010,也就是要对上述与运算结果进行左移一位。而此时,真正的加的结果应为Step1和Step2运算结果之和。

(3)迭代求解
重复以上两步,计算A+B直至进位信息B为0,得到加运算结果。


代码实现如下:

public static int getSum(int a, int b) {    int carry = 0;    while (b != 0) {        // 伪加运算        a = a ^ b;        // 计算进位信息        carry = a & b;        // 左移得到真正的进位消息,进行下次重复迭代        b = carry << 1;    }    return a;}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海岛奇兵勋章太多对手太强怎么办 鱼为什么换缸鱼翅黑了怎么办 鱼丸捕鱼大作战换手机了怎么办 2o岁j'j小怎么办 为什么小米5s指纹不能用怎么办 cs录屏软件运行内存太大了怎么办 可是没有他我怎么办啊是什么电视剧 可是没有他我怎么办啊是哪个电视剧 手机太卡了打字打不了了怎么办 梦幻西游的将军令没有电了怎么办 将军令全部的序列号都忘记了怎么办 船员证被公司压着想自己换证怎么办 电子录入系统中无法打开影像怎么办 火车票退票后说银行退款失败怎么办 苹果4s玩游戏闪退怎么办 买了二手房原房主不迁户口怎么办 苹果禁反忘记工id密码了怎么办 玩英雄联盟用腾讯游戏平台卡怎么办 游戏代练接单了没有给我账号怎么办 华为手机进入设置立即闪退怎么办 股东发现公司有做假账现象怎么办 中国在服役期间有纹身被发现怎么办 脚碰了肿了紫了怎么办 外阴出血了怎么办去医院检查没问题 三个半月宝宝体检脚有的紧怎么办 肛门被红枣核刺了一个洞怎么办 肛门里面有棉签上的棉花怎么办 孩子裤子沾屎怎么洗下来怎么办 做完痔疮手术后有点肛门狭窄怎么办 孕妇做b超宝宝不配合怎么办 怀孕产检医生问的尴尬怎么办 带着节育环做的核磁怎么办 便秘洗肠后最一周未排便怎么办 用了开塞露后肚子疼拉不出来怎么办 冰点脱毛当天用沐浴露洗澡了怎么办 自体脂肪填充脸部但发红又痒怎么办 金矿受伤死亡不给开死亡证明怎么办 手机欠费了导致没信号了怎么办 金立手机指纹硬件无法使用怎么办 试管取卵医生说卵子碎片多怎么办 取卵腹水抽水后尿不通怎么办