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

时间:2015-01-23 18:32:18

标签: twos-complement data-representation

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

我找到5位数字的最小值和最大值,即00000,我不知道最大值是多少。那么转换成两个补码?这听起来很愚蠢,但它是我唯一能想到的......

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

我不确定如何解决这个问题。

任何帮助或解释都会非常感激:)

2 个答案:

答案 0 :(得分:4)

两个补充

N位数的两个补码范围为−(2N − 1 − 1)+(2N - 1)

这是因为要获得数字的两个补码表示:

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

因此第一位(MSB)将是符号位,当数字为负时将等于1。 如果你试图转换一个负数并最终得到一个从零开始的数字(或者如果你试图转换一个正数并最终得到一个以一个开头的数字),你需要获得更多的比特来存储这个号码正确。

N等于5时,请记住这一点:

最大

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

最小

−(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

这样做你意识到你需要另外一点来存储你的标志,因为你得到的数字似乎是积极的! (负数始终以此表示中的一个开头,我们知道这个数字是负数,但它以零开头)。

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

使用aditional sign bit:

如果它是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) = (28 - 1) = 256 - 1 = 255 = FF 16

最小

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

我们可以看到-EA > -10024 < FF,因此可以存储数字!

答案 1 :(得分:3)

我想澄清这个旧答案。

N位数的两个补码范围为−(2N − 1)+(2N - 1 - 1)

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

N等于5时,请记住这一点:

最大

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

最小

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