假设 2 的补码表示,可以用 5 位数字表示的最大值和最小值是多少?
我是否找到 5 位数字的最小值和最大值,即 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想到的……
我的最后一个问题是:假设它们是使用 2 的补码格式存储的,处理器中存储 –EA(base16) 和 24(base16) 之间的值所需的最小寄存器长度是多少?
我不知道如何解决这个问题。
任何帮助或解释将不胜感激:)
假设 2 的补码表示,可以用 5 位数字表示的最大值和最小值是多少?
我是否找到 5 位数字的最小值和最大值,即 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想到的……
我的最后一个问题是:假设它们是使用 2 的补码格式存储的,处理器中存储 –EA(base16) 和 24(base16) 之间的值所需的最小寄存器长度是多少?
我不知道如何解决这个问题。
任何帮助或解释将不胜感激:)
N
带数字的二进制补码范围是to 。−(2N − 1 − 1)
+(2N - 1)
发生这种情况是因为要获得数字的二进制补码表示:
所以第一位(MSB)将是一个符号位,当数字为负时等于一个。如果您尝试转换负数并以从零开始的数字结束(或者如果您尝试转换正数并以从一开始的数字结束)您将需要获取更多位来存储此数字适当地。
考虑到什么时候N
等于 5:
(25 - 1)
= = =(24 - 1)
16 - 1
15
−(25 − 1 − 1)
= = =−(24 − 1)
−(16)
-16
如果您将最大可能数 (15) 10 = 01111 2添加一个,您将得到 10000 2 = -16,这就是为什么这是可能的最大值/最小值。
-EA 16 = -(1110 1010) 2
要获得二进制补码,您必须反转所有位并加 1:
-EA 16 = (0001 0101 +1) 2 = 0001 0110 2
这样做你意识到你需要另一个位来存储你的符号,因为你得到的数字似乎是正的!(在此表示中,负数总是以 1 开头,我们知道这个数字是负数,但它以 0 开头)。
将获得的数字转换为十进制,我们得到 22,这是正数。出现这个问题是因为我们没有添加一点来表示符号。
使用附加符号位:
-EA 16 = -(0 1110 1010) 2 (1 0001 0101 +1) 2 = 1000 0110 2
因此,您需要 9 位来存储该数字。
24 16 = (0010 0100) 2
要正确存储数字,您只需要 7 位(6 位 + 符号位)。
您需要一个 9 位寄存器,因为您应该能够存储这两个数字。(您必须获得最大数字的大小,否则它将被截断并错误地表示。)
即使有点不寻常,一个 9 位寄存器也可以存储以下范围内的数字:
(29 - 1)
= = = = FF 16(28 - 1)
256 - 1
255
−(29 − 1 − 1)
= = = = -100 16−(28 − 1)
−(256)
-256
正如我们所见-EA > -100
,24 < FF
数字可以被存储!
我想澄清这个旧答案。
N
带数字的二进制补码范围是to 。−(2N − 1)
+(2N - 1 - 1)
这与投票率最高的答案的第一行不同。
考虑到什么时候N
等于 5:
(25 - 1 - 1)
= = =(24 - 1)
16 - 1
15
−(25 − 1)
= = =−(24 − 1)
−(16)
-16