12、P1 W2 U2.3 负数 与 减法

作者: shazizm | 来源:发表于2019-07-29 19:19 被阅读0次

视频:
如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
P1W2U2.3 - Negative Numbers

上节讲解了 二进制的计算 和 加法器,但我们只提到了正数。遗留了两个问题
一个是负数问题
一个是溢出问题

这节就来看看 计算机世界里的 负数 如何巧妙的一次解决两个问题。

很自然如下图,会想到一种保留最左边的一位数,用来代表+和-。


不采用

很快发现这个设计有很多问题:
1.比如会出现 0 和 -0 的情况。
2.进行计算的时候还需要额外处理正负问题。

所以这个方案看起来并不是最优雅的设计。


不采用

替代设计 是一种叫 2's complement (补码)的方法。

补码:
在计算机系统中,数值一律用补码来表示和存储。
原因在于,使用补码,可以将符号位和数值域统一处理;
同时,加法和减法也可以统一处理。
此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

如下图 0 到 7。八个数都是和原来一样,对应各自二进制数。
负数 -x ,用 2^n-x 结果的二进制 来对应表示。(n是二进制位数,下图就是4)

比如 -1 就是 16-1 = 15 => 1111。那么 -1 对应的就是 1111
比如 -8 就是 16-8 = 8 => 1000。那么-8 对应的就是 1000

这样我们就避免了 -0 和 0 的重复问题。正负现在各有二进制可以代表了。
但是负数这么魔性的对应,又该如何进行加法计算呢。


我感觉因为有了这种正负数的划分,和负数的对应法。才有了只用加操作就能完成 加减法。而且还同时解决了溢出问题。

如下图,两个负数相加(-2) + (-3)。
-2 对应 1110
-3 对应 1101

1110 + 1101 = 11011 = 最左侧溢出一位抛弃 = 1011

什么? 对应 1011
-5!
而 -5 神奇地 就是 (-2) + (-3) 的结果。

这是什么神仙魔法。。。

不服气,我要试一个正数一个负数相加 2 + (-3)。
2 对应 0010
-3 对应 1101

0010 + 1101 = 1111 = 没溢出 = 1111

什么?对应 1111
-1!
服了

大概 视频 5分50 的解释了为什么这么神奇。
提到了模(modulo)。
谁能说明白,就文章下方留言吧,方便大家学习了。


“模” 的概念可以帮助理解 补数 和 补码 。

最后我们就剩一个问题需要解决了

上一个“不服”试验,假如 2-3 那么就要 先转换成 加法 2 + (-3),这里实际上我们需要先做一个转换 把 3 转成 -3。再用已知的加法操作。

那么如何把 3 转成 -3呢,或任意数 x 转换成 -x 呢。

分5步推理:

  1. 负数?公式: 2^n -x
  2. 数学小技巧:2^n -x = 1 + (2^n -1)-x
  3. 而 2^n -1 ,假设n为8,2^n = 256,256-1=255 ,255 对应 11111111
  4. 而 (2^n -1)- x 就是用 11111111 减 x,从下图右下角来看就是对 x 取反。
  1. 所以 x 转成 -x 的方法就是:x对应的二进制"取反"再加1。
二进制数 取反 就是每位 都做 not 运算。

再来做一个 4 转 -4 的变换

4 对应 0100
0100 取反 1011
1011 加一 1100
1100 对应 -4

真香

这节到此说了一个事,只要采用文章一开始的 正负数对应方法。了解 正数 转 负数的方法。我们就和上一章一样,可以不管正负,不担心溢出错误。还是 两个数 相加操作。轻松拓展了 负数 和 减法 的设计。

神奇:负数的这种表示方式,又正好能得出正确的加法结果。这是一个巧合吗?还是其中有着数学原理?

下节课,我们可以进入 ALU(算数逻辑单元) 的讲解了。

相关文章

  • 12、P1 W2 U2.3 负数 与 减法

    视频:如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接P1W2U2.3 - Negative ...

  • 负数的加减法

    上一篇我们已经认识了负数是什么,那我今天就来分析一下负数的加减法。 在分析加减法之前我们先来认识一...

  • 负数加减法

    什么是正数?正数就是自然数,就是大于零的数,那么什么又是负数呢?负数就是小于零的自然数。 在生活中...

  • 负数加减法。

    什么是正数?正数就是自然数,就是大于零的数,那么什么又是负数呢?负数就是小于零的自然数。 在生活中...

  • 负数加减法

    要想要了解负数加减法,那你首先要知道负数是什么。负数可以在数轴上表示:以零为临界点,在零右边的就是正数,在零左边的...

  • 为什么你因忙而茫?

    你还会做减法吗? 为什么加法比减法好算?为什么我们先学加法,然后把减法定义理解为“加上一个负数”,而不是相反呢? ...

  • 71-函数练习:数学游戏

    随机生成100以内的两个数字,实现随机的加减法。如果是减法,结果不能是负数。算错三次,给出正确答案。

  • iOS开发TableView等控件翻转

    转换前 P1 (X1, Y1, W1, H1); 转换后 P2 (X2, Y2, W2, H2); 已知:H1 =...

  • 负数的认识

    知识与技能:初步认识负数,了解负数的作用,感受运用负数。 过程与方法:使学生知道正数和负数的读法和写法,知道0既不...

  • 计算机减法的实现与负数的表示

    328-149的结果为179,我们自己在计算时用到了“借位“的技巧,”但芯片本质上只是一些逻辑门,如果用逻辑门去实...

网友评论

    本文标题:12、P1 W2 U2.3 负数 与 减法

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