我有一个关于计算内存地址的问题:
我有3个内存块:
- 1x 1KByte (IC1) - 2^10 Byte
- 2x 4KByte (IC2 + IC3) 2^12 Byte
到目前为止,我计算了这些内存地址:
IC1:
0000 0000 0000 0000 (Starting adress)
0000 0011 1111 1111 (Ending adress, I got this from inverting the last 10 digits)
IC2:
0000 0100 0000 0000 (Starting adress)- Last ending adress +1
0000 1011 1111 1111 (Ending adress, I got this from inverting the last 12 digits)
但是,在IC3中必须有一些方法可以将进位位放入我的第一个0000块中,因为当仅使用3个最后3个十六进制数字时,我的空间不足:
IC2:
0000 1100 0000 0000 (Starting adress)- Last ending adress +1
现在的结局地址是什么?如果我再次反转最后12位数字,我会得到一个已经在使用的十六进制地址。很明显,下一个十六进制数字必须增加到1,但我找不到这样做的规则。
有什么建议吗?
答案 0 :(得分:1)
我不确定你为什么要使用bit翻转,看起来它应该是一个非常有效的实现,如果它工作,但它似乎不是:
你的IC2块起始地址(十六进制)是400(从内存开始是1K,到目前为止都是好的),但十六进制的结束地址是BFF,它应该是13FF(1k + 4k = 5k)二进制文件是0001 0011 1111 1111
有没有理由不使用加法而不是位翻转来计算这些地址?