给定一个地址范围如何计算内存大小?

时间:2013-01-01 18:26:59

标签: hex memory-address

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

      First @      Last @ 

范围1:FD00 0000到FDFF FFFF

范围2:D000 0000到DFFF FFFF

范围3:FA00 0000到FBFF FFFF

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

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

请帮忙

7 个答案:

答案 0 :(得分:5)

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

您可以通过首先将00FF FFFF转换为十进制数,然后将该字节数转换为兆字节来获得最大的洞察力。

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

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

有大量在线Hex到Decimal转换器。内置于Windows的计算器也可以进行转换。

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

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

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

0010 0000 = 1,048,576

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

答案 1 :(得分:2)

抱歉,回答其他问题的问题......

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

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

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

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

基于我的逻辑,范围1 原始问题的答案应为01000000hex(范围1 = 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 mebibytes(根据IEC / ISO标准联合 - IEC 80000-13)
是的,谷歌搜索只是教育了我(可能最近和部分地对kibibytes和mebibytes表示意思)...如果你有兴趣,请查看https://en.wikipedia.org/wiki/Kilobyte

答案 2 :(得分:1)

等式是

public void methodToAccessSortOrder() {
   DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("<CLIENT ID OF DATATABLE>");
   String sortOrder = dataTable.getSortOrder();
   // do anything with sortOrder
}

示例

second_add - first_add + 1

答案 3 :(得分:0)

range1: FD00 0000 to FDFF FFFF:
  FD FF FFFF 
- FD 00 0000
------------
  FF FFFF = 1MB (0x100 0000)

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

range3 : FA00 0000 to FBFF FFFF = 32MB (0x200 0000)

答案 4 :(得分: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.对于第二个和第三个问题,请做同样的事情。祝你好运。

答案 5 :(得分:0)

简单类比,0到9之间的金额范围(地址)是多少? 答案是10,而不是9,因为已计算范围/地址0。

所以, 容量=最后一个地址-第一个地址+ 1。

范围1:FD00 0000至FDFF FFFF的容量为 FDFF FFFF-FD00 000 +1 = FF FFFF +1 = 100 0000(十六进制) 或dec(16MB)中的16777216。

答案 6 :(得分:-1)

我认为公式

  

size = end - begin

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

由于HEX和DEC,内存大小使得它变得更难,其中十进制对于人类来说很容易阅读,并且通常使用B(字节)。

为了方便起见,如果你安装了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