2

假设 2 的补码表示,可以用 5 位数字表示的最大值和最小值是多少?

我是否找到 5 位数字的最小值和最大值,即 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想到的……

我的最后一个问题是:假设它们是使用 2 的补码格式存储的,处理器中存储 –EA(base16) 和 24(base16) 之间的值所需的最小寄存器长度是多少?

我不知道如何解决这个问题。

任何帮助或解释将不胜感激:)

4

2 回答 2

5

二进制补码

N带数字的二进制补码范围是to 。−(2N − 1 − 1)+(2N - 1)

发生这种情况是因为要获得数字的二进制补码表示:

  • 如果数字大于或等于零,请保持原样。
  • 如果数字小于零,则反转所有位并加一。

所以第一位(MSB)将是一个符号位,当数字为负时等于一个。如果您尝试转换负数并以从零开始的数字结束(或者如果您尝试转换正数并以从一开始的数字结束)您将需要获取更多位来存储此数字适当地。

考虑到什么时候N等于 5:

最大

(25 - 1)= = =(24 - 1)16 - 115

最低限度

−(25 − 1 − 1)= = =−(24 − 1)−(16)-16

如果您将最大可能数 (15) 10 = 01111 2添加一个,您将得到 10000 2 = -16,这就是为什么这是可能的最大值/最小值。

将十六进制逐位转换为二进制:

-EA

-EA 16 = -(1110 1010) 2

如果这个数字只有 8 位长

  • 第一位是符号位。

要获得二进制补码,您必须反转所有位并加 1:

-EA 16 = (0001 0101 +1) 2 = 0001 0110 2

这样做你意识到你需要另一个位来存储你的符号,因为你得到的数字似乎是正的!(在此表示中,负数总是以 1 开头,我们知道这个数字是负数,但它以 0 开头)。

将获得的数字转换为十进制,我们得到 22,这是正数。出现这个问题是因为我们没有添加一点来表示符号。

使用附加符号位:

如果它是 9 位长

-EA 16 = -(0 1110 1010) 2 (1 0001 0101 +1) 2 = 1000 0110 2

因此,您需要 9 位来存储该数字。

24

24 16 = (0010 0100) 2

要正确存储数字,您只需要 7 位(6 位 + 符号位)。

寄存器总位数

您需要一个 9 位寄存器,因为您应该能够存储这两个数字。(您必须获得最大数字的大小,否则它将被截断并错误地表示。)

9位寄存器

即使有点不寻常,一个 9 位寄存器也可以存储以下范围内的数字:

最大

(29 - 1)= = = = FF 16(28 - 1)256 - 1255

最低限度

−(29 − 1 − 1)= = = = -100 16−(28 − 1)−(256)-256

正如我们所见-EA > -10024 < FF数字可以被存储!

于 2015-01-23T18:42:12.450 回答
4

我想澄清这个旧答案。

N带数字的二进制补码范围是to 。−(2N − 1)+(2N - 1 - 1)

这与投票率最高的答案的第一行不同。

考虑到什么时候N等于 5:

最大

(25 - 1 - 1)= = =(24 - 1)16 - 115

最低限度

−(25 − 1)= = =−(24 − 1)−(16)-16

于 2017-03-13T18:40:01.640 回答