给定数字的2的补码最小位数

问题描述:

我试图找出它,但仍然卡住。给定数字的2的补码最小位数

比方说,我们有十进制数13(1101在二进制)。在无符号的情况下,我们需要至少4位来表示它(1101,因为它是),但是在2的补码符号中,我们需要5位,MSbit设置为0,因为13是正数?我知道在2的补码中,MSbit表示值(+或 - )的符号。那么它会是01101? 另外,如果MSbit为0,那么这个数字在单数2的补码中仍然是相同的,但是如果它是1,那么将是As = Au-2^n。

现在让我们假设该号码是-13。为了找出-13的二进制形式,我翻转了13(1的补码)的所有位,然后给它们加上+1(2的补码)。所以在这种情况下,我们有:1101 ---> 0010 + 1 ---> 0011,但在单数2的补码中,MSbit是0(所以它是正数),我们说“这是数字3”,或者我们可以1作为新的MSbit看起来像负数(如11101) ?

谢谢:)

在二进制补码,正数有前导零无限多的,而负数有领头的人无限多的。为了允许在有限的空间中存储,表示的最左边的数字将在左边无限地重复。由于数字13需要以无限数量的零来引导,所以它的表示必须以零开始。因此最短的表示将是01101,但是具有任意数量的零(例如00001101或0000000000001101)的其他表示也同样有效。

虽然可以通过翻转所有位并加1来取消数字,但我认为从零中减去更有帮助。如果从... 00000中减去... 01101,则最后一位数字为借入1,然后是1借入,0借入,0借入,1借入。由于被减去的值(... 01101)和从(... 00000)中减去的值中的所有剩余数字都将为零,因此结果中的每一个剩余数字都将是带借位的1。

+0

是的,我明白了你的意思。介意看看新的更新问题? (另一个例子显示)。 – DarkSysOp

+0

@DarkSysOp:增加了一些更多的解释。 – supercat

现在我们假设数字是-13。为了找出-13的二进制形式,我翻转了13(1的补码)的所有位,然后给它们加上+1(2的补码)。所以在这种情况下,我们有:1101 ---> 0010 + 1 ---> 0011

你没有翻转所有位,因为否定了一些使用签署表示暗示。你给位13代表1101b,这是不是签名。如果它已被签名,则表示另一个号码,即101b + 1 = 110b = 6,因此为-6。

您必须确保一个正数(例如13)确实具有0作为其MSB,正如您已经证明其最小形式:01101b。交换这些你获得10010b,加1然后产生10011b,这在你的5位字节确实代表-13。

使用更常见的8位字节,您会发现11110011为负值,00001101为正值。 (注意,翻转所有位并加1会在两个方向上使用。)