美文网首页
不用加减乘除,实现两数相减

不用加减乘除,实现两数相减

作者: Two口吃成大胖子 | 来源:发表于2017-11-11 13:19 被阅读0次

今天在刷到这道题,《剑指offer》上实现了两数相加,想了一下两数相减的思路

设被减数x=10,减数y=7,那么一次异或后:

  1010

^ 0111

   1101

两数相减,0^0=0,0^1=1,1^0=1,1^1=0,可以发现只有0-1的时候,我们需要向高位借位,但是当前为答案也是0^1的结果。

那么我们下步目标,应该求出那些位置是需要向高位借位的。其实一次异或后的结果&减数,位置为1的都是需要借位的。因为相应的位置可以反推出被减数是0,减数是1。

所以就有类似于两数相加的思路:

两数相减代码

然后,我就在思考,那么8-10会得出正确的答案么,事实上也是正确的。

因为a<b,所以b会不断得向高位借位,导致b溢出,变成了-2147483648(2^-31),负数和正数异或时,也是需要变成补码后,再操作,最后再变回源码。

ps:b变成-2147483648过程:b会不断左移,知道变成int能表示的最大值,2^31-1(最高位为0 ,表正数),左移1位,最高位是1,变成了int能表示的最小数了。而且-2147483648的补码就是本身,因为按照正常去推补码,答案应该是0,但是0的源码,反码,补码都是0,这样会形成冲突,所以,我们规定了-2147483648补码是本身。

相关文章

  • 不用加减乘除,实现两数相减

    今天在刷到这道题,《剑指offer》上实现了两数相加,想了一下两数相减的思路 设被减数x=10,减数y=7,那么一...

  • 杭电ACM-2104

    题目: 此代码运用了更相减损术,通过 两数相减的差 与 被减数 不断相减,直到两数相减的差与被减数相同,即此时这2...

  • JavaScript#16:数组--(三数最接近和)3Sum C

    最开始想的特别复杂,忘记了两个数的距离不论正负一定是两数相减,而且三数和等于target的情况也不用单独拎出来。但...

  • 事业成功的秘诀

    生意人的账簿记录收入与支出,两数相减,便是盈利,人生账簿,记录爱与被爱,两数相加,就是成功。

  • 不用加减乘除实现加法

    其中 异或运算相当于对两个数进行 “不进位” 的加法,与运算并向左移一位得到两个数的加法进位,接下去重复上述过程,...

  • 【人生的成就】

    生意人的账簿,记录着收入与支出,两数相减,便是盈利。人生的账簿,记录着爱与被爱,两数相加,就是成就。

  • 2017-10-27

    生意的账簿,记录了收入和支出,两数相减,便是盈利。人生的账簿里记录着爱与被爱,两数相加,便是成就。 人过半...

  • 辗转相除法的应用

    题目: 设计实现抽象数据结构"有理数",基本操作包括有理数的加减乘除,以及求有理数的分子分母 思路: 设计这个数据...

  • 005 图像像素的算术操作

    本节内容:像素的加减乘除 两幅图像进行加减乘除时,图像类型、通道数、大小必须都一致。 C++ Python

  • Scala学习笔记4——类和对象(二)

    有理数类的表示 实现规范:支持有理数的加减乘除,并支持有理数的规范表示 1.定义Rational 首先,考虑用户如...

网友评论

      本文标题:不用加减乘除,实现两数相减

      本文链接:https://www.haomeiwen.com/subject/fhvwmxtx.html