最大值和最小值可用5位数表示,假设2的补码表示?
我找到5位数字的最小值和最大值,即00000,我不知道最大值是多少。那么转换成两个补码?这听起来很愚蠢,但它是我唯一能想到的......
我的上一个问题是: 在-EA(base16)和.EA之间存储值所需的处理器中的最小寄存器长度是多少? 24(base16)假设它们是使用2的补码格式的商店?
我不确定如何解决这个问题。
任何帮助或解释都会非常感激:)
答案 0 :(得分:4)
N
位数的两个补码范围为−(2N − 1 − 1)
到+(2N - 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 16 = - (1110 1010) 2
要获得二进制补码,必须反转所有位并加1:
-EA 16 =(0001 0101 +1) 2 = 0001 0110 2
这样做你意识到你需要另外一点来存储你的标志,因为你得到的数字似乎是积极的! (负数始终以此表示中的一个开头,我们知道这个数字是负数,但它以零开头)。
将获得的数字转换为十进制,我们得到22,这是正数。出现此问题的原因是我们没有添加来表示符号。
使用aditional sign bit:
-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)
= (28 - 1)
= 256 - 1
= 255
= FF 16
−(29 − 1 − 1)
= −(28 − 1)
= −(256)
= -256
= -100 16
我们可以看到-EA > -100
和24 < 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