讨论一下wanb这个是否你有什么好玩的的问题

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符

你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b计算他们的和并返回就行。

a和b都是 32位 整数么

我可以使用位运算符么?

首先肯定要想到用位运算来操作即用二进制来处理,好既然想到这里,当然要举个例子来想想最简单的1+2

那a+b不就等于a|b吗?那么再来验证下1+3

发现之前的猜想错误了,然后再经过一些其他简单的验算我们会轻而易举的发现一个规律,如果没有进位那么a+b = a|b 如果有进位就不成立。

所以接下来要处理进位的问题我们在用1+3来研究下进位的问题,如果我们忽略有进位的位置后再加上应该进位的位置,就是我们的值

我们的值应该是c+d(但是c和d还是有进位,那么再重复上述操作)即:

以上叙述是Copy的某博客的心得 原文章地址在这里

但是,原文章犯了个致命的错误:没有想到a b为负数的情况

在经历了一翻寻找后找到的所有代码基本上都为抄这篇博客的

代码,这让我非常崩溃。

对于位运算一无所知的我只能从头分析二进制加减法运算规

为未知数所以算完等号右边后应执行反补码的操作。也就是

等号右边-1再求反码

正负。所以设定了t1 t2用来判断a|b的正负性

    4.与本题无关 负数补码的补码就是负数补码的相反数,

而不是单纯的用定义求负数的补码的補码。比较绕

我要回帖

更多关于 你有什么好玩的 的文章

 

随机推荐