这是一个我过去失败过的测验问题,尽管我知道答案,但我不明白得到正确答案的不同步骤。
问题是:
以下哪个地址与行缓存对齐
a. 0x7ffc32a21164
b. 0x560c40e05350
c. 0x560c40e052c0
d. 0x560c3f2d71ff
问题的解决方案:
Each hex char is represented by 4 bits
It takes 6 bits to represent 64 adress, since ln(64)/ln(2) = 6
0x0 0000
0x4 0100
0x8 1000
0xc 1100
________
2^3 2^2 2^1 2^0
8 4 2 1
Conclusion: if the adress ends if either 00, 40, 80 or c0, then it is aligned on 64 bytes.
The answer is c.
我真的不明白我们是如何从6位表示到这个答案的。谁能在给出的解决方案上加些什么使它更清楚?
问题归结为:哪个数字是64的倍数?剩下的就是了解他们使用的数字系统了。
在二进制中,64被写成1000000。在十六进制中,它被写成0x40。因此,64的倍数将以0x00 (0 * 64), 0x40 (1 * 64), 0x80(2 * 64)或0xC0(3 * 64)结束。(然后循环往复。)答案c是结尾正确的那个
一个十进制的类比是:哪个数是5的倍数?0 * 5 = 0, 1 * 5 = 5,之后循环往复。我们只需要看最后一位。如果它是0或5,我们知道这个数是5的倍数。