Binary 2';例如,为什么不随身携带?

Binary 2';例如,为什么不随身携带?,binary,signed,twos-complement,Binary,Signed,Twos Complement,我正在看大卫·马兰(David Malan())的一些精彩演讲,这些演讲将通过二进制文件进行。他谈到了有符号/无符号、1的称赞和2的补语表示法。添加了4+(-3),排列如下: 0100 1101 (flip 0011 to 1100, then add "1" to the end) ---- 0001 00000100 11111101 -------- 00000001 但他挥舞着他神奇的双手,扔掉了最后一只手。我做了一些维基百科的研究,但不太明白,有人能解释一下为什么那个特殊的carr

我正在看大卫·马兰(David Malan())的一些精彩演讲,这些演讲将通过二进制文件进行。他谈到了有符号/无符号、1的称赞和2的补语表示法。添加了4+(-3),排列如下:

0100
1101 (flip 0011 to 1100, then add "1" to the end)
----
0001
00000100
11111101
--------
00000001
但他挥舞着他神奇的双手,扔掉了最后一只手。我做了一些维基百科的研究,但不太明白,有人能解释一下为什么那个特殊的carry(在8的->16的专栏中)被删除了,但他保留了它之前的那个吗


谢谢

在某些时候,您必须设置位数来表示这些数字。他选择了4位。第5位的进位丢失。但这没关系,因为他决定用4位来表示这个数字


如果他决定用5位来表示数字,他会得到相同的结果。

最后一个进位被丢弃,因为它不适合目标空间。这将是第五位

如果他执行了相同的加法,但使用了例如8位存储,则看起来是这样的:

0100
1101 (flip 0011 to 1100, then add "1" to the end)
----
0001
00000100
11111101
--------
00000001
在这种情况下,我们还将被困在“未使用的”携带

我们必须用这种方式来处理携带物,以使添加两个赞美词的方法能够正常工作,但这一切都很好,因为当你的存储空间有限时,这是处理携带物最简单的方法。不管怎样,我们得到了正确的结果,对吗:)



x86处理器在进位标志(CF)中存储这样一个额外的进位,可以使用某些指令进行测试。

进位被删除,因为无法使用它执行任何操作。如果它对结果很重要,则意味着该操作超出了可存储在结果中的值的范围。在汇编程序中,通常有一条指令可以测试超出结果末尾的进位,您可以在那里显式地处理它-例如,将它带入多精度值的下一个较高部分。

这就是它的美妙之处。。。您的结果将与您添加的术语大小相同。因此,第五位被抛出

在2的补码中,使用进位来表示上一次操作中是否有溢出

您必须查看最后的两个进位,以查看是否有溢出。在您的示例中,最后两个进位是
11
,这意味着没有溢出

如果最后两个进位是
11
00
,则不会发生溢出。如果最后两个进位是
10
01
,则存在溢出。这就是为什么他有时关心进位,有时却忽略了进位

下面的第一行是进位行。此行中最左边的位用于确定是否存在溢出

1100
 0100
 1101
 ----
 0001

如果您通过添加更多的数字位置来扩展左侧,您将看到进位向左侧滚动到无限多的位位置,因此您永远不会得到最终进位1。所以答案是肯定的

 ...000100
+...111101
----------
....000001

看起来您只使用了4位,所以没有16的列

如果使用的位数超过4位,那么-3表示形式将有所不同,并且数学的进位仍然会在末尾被抛出。例如,对于6位,您将有:

 000100
 111101
 ------
1000001
由于进位超出了表示的位范围,它就消失了,您只有
000001

考虑25+15:

5+5=10,我们保留0,让1进入tens列。那么它是2+1(+1)=4。因此,结果是40:)

二进制文件也是如此。0+1=1,0+0=0,1+1=10=>将1发送到8列,0+1(+1)=10=>将1发送到下一列-下面是溢出,以及我们为什么要丢弃1

这就是为什么2的补码如此之大。它允许您像使用base-10一样进行加/减运算,因为(ab)使用的是符号位是MSB这一事实,这将在执行时将操作级联到溢出


希望我能让别人明白我的意思。当英语不是你的母语时,很难解释这一点:)

因为你谈论的是4位表示法。与实际机器相比,这是不正常的,但如果我们想当然地认为一台计算机在一段时间内每个字节有4位,那么我们有以下属性:一个字节在15到-15之间换行。超出该范围的任何内容都无法存储。除此之外,你会怎么处理符号位之外的第五位呢


现在,考虑到这一点,我们可以从日常数学中看到,
4+(-3)=1
,这正是您得到的结果。

当执行2的补码加法时,进位指示问题的唯一时间是出现溢出情况时-如果两个操作数具有不同的符号,则不会发生这种情况

如果它们具有相同的符号,则溢出条件是当符号位从2个操作数更改时,即,最高有效位有进位

如果我记得我的计算机体系结构学习,这通常是在硬件级别通过一个标志检测到的,该标志是在最高有效位的进位与最高有效位的进位不同时设置的。在您的示例中,情况并非如此(有一个进位到msb,也有一个进位到msb)

一种简单的方式是将其视为“符号不变”。如果msb中的进位与进位不同,则表示符号发生了不正确的更改。

进位与溢出不同 在本例中,您确实执行了MSB。根据定义,这件行李最终会落在地板上。(如果有地方让它去,那么它就不会超出MSB。)

但添加两个不同符号的数字不会溢出。只有当两个具有相同符号的数字产生具有不同符号的结果时,才会发生溢出。

注意,这不是“翻转然后在末尾添加1”。它是“翻转位并添加1”。这是一个重要的区别。你写的方式