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

时间:2017-08-22 18:14:15

标签: binary bit-manipulation computer-science cpu-architecture twos-complement

我正试图解决这个问题,但仍然陷入困境。

假设我们有十进制数 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)?

谢谢:)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

  

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

您没有翻转所有位,因为否定数字意味着使用已签名表示。您将表示13的位设为110b,其中已签名。如果签名,它将代表另一个数字,即01101b + 1 = 10010b = 6,因此-6。

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

使用更常见的8位字节,您会发现负值为SPTH = '/home/sample'.txt ,正值为SPTH。 (注意,翻转所有位并添加1用于两个方向。)