me *_*ung 2 twos-complement data-representation
假设 2 的补码表示,可以用 5 位数字表示的最大值和最小值是多少?
我是否找到了 5 位数字的最小值和最大值,即 00000,但我不确定最大值是多少。然后转换为二进制补码?这听起来很愚蠢,但这是我唯一能想到的……
我的最后一个问题是:假设它们是使用 2 的补码格式的存储,那么在处理器中存储 –EA(base16) 和 24(base16) 之间的值所需的最小寄存器长度是多少?
我不知道如何解决这个问题。
任何帮助或解释将不胜感激:)
我想澄清这个旧答案。
\n\n二进制补码的N数字范围是到。\xe2\x88\x92(2N\xe2\x80\x89\xe2\x88\x92\xe2\x80\x891)+(2N - 1 - 1)
这与得票最高的答案的第一行不同。
\n\n考虑到当N等于 5 时:
(25 - 1 - 1)= = =(24 - 1)16 - 115
\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数字的二进制补码范围是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 16 = -(1110 1010) 2
要获得二进制补码,您必须反转所有位并加 1:
-EA 16 = (0001 0101 +1) 2 = 0001 0110 2
这样做你会意识到你需要另一位来存储你的符号,因为你得到的数字似乎是正数!(在这种表示中,负数总是以 1 开头,我们知道这个数字是负数,但它以零开头)。
将获得的数字转换为十进制我们得到 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 - 1255
?(29???1 ? 1)= = = = -100 16?(28 ? 1)?(256)-256
正如我们所见-EA > -100,24 < FF因此可以存储数字!
| 归档时间: |
|
| 查看次数: |
25742 次 |
| 最近记录: |