5位数字可以表示的最大值和最小值是多少?在 2 的补码表示中

me *_*ung 2 twos-complement data-representation

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

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

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

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

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

Cor*_*son 6

我想澄清这个旧答案。

\n\n

二进制补码的N数字范围是到。\xe2\x88\x92(2N\xe2\x80\x89\xe2\x88\x92\xe2\x80\x891)+(2N - 1 - 1)

\n\n

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

\n\n

考虑到当N等于 5 时:

\n\n

最大限度

\n\n

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

\n\n

最低限度

\n\n

\xe2\x88\x92(25\xe2\x80\x89\xe2\x88\x92\xe2\x80\x891)= = =\xe2\x88\x92(24 \xe2\x88\x92 1)\xe2\x88\x92(16)-16

\n


fpg*_*503 5

补码

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

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

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

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

考虑到这一点,当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 开头,我们知道这个数字是负数,但它以零开头)。

将获得的数字转换为十进制我们得到 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因此可以存储数字!