检查地址是否与行缓存对齐

Checking if an adress is linecache aligned

这是一个我过去失败的测验问题,尽管可以访问解决方案,但我不明白得出正确答案的不同步骤。

这是问题所在:

这些地址中的哪一个是行缓存对齐的

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 的倍数。