31位方案中的最后一个地址是什么

时间:2013-10-15 20:07:58

标签: c bit-manipulation bit

我有一个31位宽的寄存器,现在我在两个可以用作最后地址31位方案的数字之间感到困惑。

0x7fff-fffc或0x80000000是否可以在31方案中使用的最后一个地址。

3 个答案:

答案 0 :(得分:2)

地址从零开始。所以0x7FFFFFFF如果要处理字节。如果要处理32位字,请0x7FFFFFFC

答案 1 :(得分:1)

  

将0x7fff-fffc或0x80000000作为31方案中可以使用的最后一个地址。

它们都不是 - 最后一个地址是0x7fffffff(不是c)。对于0x80000000,您已经需要设置第32位。

正如@mbratch指出的那样,0x7ffffffc将是最后一个地址,如果你正在寻址32位字,或者类似0x7ffffffe,如果你正在寻址16位字。

答案 2 :(得分:1)

假设一个地址仅用于引用4个内存(如字节),则7ffffffc是最后一个。

通常我们以8位字节寻址存储器,但没有固有的需要这样做。任何数量的字节都可以进入可寻址的东西。

然后,我们开发了一个约定,我们为每个字节分配地址,但只加载内存为2或4(或任何数量)的块,因此我们构建硬件以忽略最后的1或2或任何少数地址线

值80000000不适合31位。

值7fffffff确实适合31个字节,如果你可以寻址单个字节的内存,可以使用它。

值7ffffffc也适合31个字节,如果你一次只能处理4个字节的对齐块中的字节,就会使用它。