给定数字的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。
现在我们假设数字是-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会在两个方向上使用。)
是的,我明白了你的意思。介意看看新的更新问题? (另一个例子显示)。 – DarkSysOp
@DarkSysOp:增加了一些更多的解释。 – supercat