12

我有一个无法解决的练习,我有 3 个内存范围:

      First @      Last @ 

范围 1:FD00 0000 到 FDFF FFFF

range2 : D000 0000 到 DFFF FFFF

range3 : FA00 0000 到 FBFF FFFF

问题是:给出每个范围(兆字节)的内存大小?

我所知道的是,我应该计算范围的大小 = 最后一个地址 - 第一个地址,所以第一个范围的结果是:00FF FFFF。这是正确的吗?那我该怎么办?我在互联网上搜索了我没有找到示例

请帮忙

4

7 回答 7

8

在您的范围 1 示例中,您是正确的。这是内存的大小,以十六进制表示,以字节为单位。

您可以通过首先将 00FF FFFF 转换为十进制数,然后将该字节数转换为兆字节来获得最深入的了解。

要将字节转换为兆字节,请使用关系

1 MB = 1 Megabyte = 1024 * 1 KB = 1,048,576 bytes.

有大量的在线十六进制到十进制转换器。Windows 内置的计算器也可以进行转换。

对于其他范围,您再次希望进行减法以确定范围的大小,然后应用上述步骤,例如

 FBFF FFFF
-
 FA00 0000
 ---------
 01FF FFFF

完成这些步骤以更好地掌握正在发生的事情后,以下关系将使您能够更快地回答此类问题:

0010 0000 = 1,048,576

所以 1MB 与 0010 0000 相同(有时称为 0x100000)。

于 2013-01-01T18:29:15.667 回答
3

抱歉,用另一个问题回答一个问题...

在规定范围内可用的地址数量是否也包括那些范围限制器? 例如(用十进制来说明我的观点)起始地址为 5,结束地址为 10。仅通过减法,即结束地址减去起始地址 (10-5),我们得到的范围为 5。但实际上有六个唯一地址在 5,6,7,8,9,10 的范围内(所以我们应该在 Julie 的原始问题中的减法结果中加 1?)

此外,内存地址大小实际内存大小。我们是在谈论单个内存位置的数量还是可用于存储数据的内存大小(应该考虑每个位置的大小)?

如果它只是内存位置,那么我们就差不多完成了(我认为这被称为内存地址大小)。只需要解决问题的MB部分(我会在最后谈到这个问题)

如果它是可用的存储空间,这应该包括内存的每个可寻址部分的大小,例如每个地址位置保存一个大小未知的数据块。假设它是每个内存位置 1 字节 (1B) 的数据,而不是我上面的示例,则意味着内存大小为:6(内存位置)乘以 1 字节(每个内存位置的容量),总内存大小为 6B

所以根据我的逻辑,范围 1 的原始问题的答案应该是 01000000hex (range1 = FDFF FFFF-FD00 0000 + 1 = 01000000h )。

至于该范围的内存大小,这是我真正感到困惑的地方......它是特定数量的内存位置,即 1000000h,每个位置的大小未定。那么为什么要以 MB 或 GB 表示呢。如果您确实知道每个内存位置的大小(并将位置数乘以每个位置的大小,那么您就有该范围的内存大小,并且可以用数字形式表示。

虽然我们在这里,但我真正感到困惑的是 MB、GB 等的使用。它经常被引用为每个前缀等于 1024 的倍数,例如 1KB = 1024Bytes、1MB = 1024kB 等,但 IEC 首选约定是基于 ISO 标准(根据我刚才的谷歌搜索),它说 Kilo (kB) = 1000,Mega (MB) = 1000000 等。

因此,将每个位置的未知大小放在一边,并将 1000000h 转换为十进制即 16,777,216,答案是:

  • 16MB (16777216/1024/1024=16)我怀疑这是老师要的答案
  • 16.777216MB(根据ISO标准)
  • 16 MB(根据联合 IEC/ISO 标准 - IEC 80000-13)

顺便说一句,谷歌搜索只是教育了我(可能被认为是最近和部分)关于千字节和兆字节......如果你有兴趣,请查看https://en.wikipedia.org/wiki/Kilobyte

于 2016-04-22T03:18:11.573 回答
3

方程是

second_add - first_add + 1

例子

fdff ffff - fd00 0000 + 1 = 0100 0000 = 2^24 = 2^4 * 2^20 = 16Mbyte [2^20 byte = 1 Mbyte] 
于 2017-02-22T18:31:37.563 回答
2

简单的类比,从 0 到 9 的数量范围(地址)是多少?答案是 10,而不是 9,因为范围/地址 0 被计算在内。

因此,容量 = 最后地址 - 第一个地址 + 1。

range1 的容量:FD00 0000 到 FDFF FFFF 将为 FDFF FFFF - FD00 000 + 1 = FF FFFF + 1 = 100 0000(十六进制)或 16777216(十进制)(16MB)。

于 2019-08-21T03:46:37.070 回答
0
range1: FD00 0000 to FDFF FFFF:
  FD FF FFFF 
- FD 00 0000
------------
  FF FFFF +1 = 1MB (0x100 0000)

range2 : D000 0000 to DFFF FFFF = 256MB (0x1000 0000)

range3 : FA00 0000 to FBFF FFFF = 32MB (0x200 0000)
It should be noted that +1 is added since both number are exclusive here
于 2015-07-16T11:36:44.957 回答
0

我认为公式

大小 = 结束 - 开始

总是可以使用(与其他尺寸没有区别,即裤子的腰围)

由于 HEX 和 DEC,内存大小使其变得更难,其中十进制易于人类阅读,并且通常使用 B(Bytes)。

为方便起见,如果您安装了 bc,您可能想尝试一下

echo 'ibase=16;yourendhex-yourbeginhex' | bc

在你的情况下

echo 'ibase=16;FDFFFFFF-FD000000' | bc
echo 'ibase=16;DFFFFFFF-D0000000' | bc
echo 'ibase=16;FBFFFFFF-FA000000' | bc
16777215  #16MB
268435455 #268MB
33554431  #34MB
于 2017-09-19T11:01:08.907 回答
0

为了方便大家理解,我只是把问题改成如下,2-9范围内的内存大小是多少?

答案是8,如下2、3、4、5、6、7、8、9。公式是最高地址-最低地址+1。

对于您的第一个问题范围1:FD00 0000 到 FDFF FFFF,答案是 00FF FFFF+1=0100 0000H=1 X 16^6= 1 X (2^4)^6=2^24=2^4 x 2^20 . 对于二进制系统 2^10= 1024=1K 和 2^20=1K x 1 K = 1M 然后 2^4 x 2^20=16 M。对于第二个和第三个问题,请做同样的事情。祝你好运。

于 2018-03-25T09:03:59.153 回答