2

所以我知道我可以将 0xFFFFFFFF 的掩码移位 8 位,例如获得 0xFFFFFF00 和它的地址并获取除最后 8 位之外的所有内容,但我想换一种方式,这样我就可以抓住带有 0x000000FF 之类的掩码的地址,但是右移显然不起作用。有任何想法吗?

这是我提到的第一种位移的代码。

public int Block_tag(int address, int block_size, int max_address)
    {
        int bit_shift = (int)Math.Log(block_size, 2);
        int bit_mask = max_address << bit_shift;
        return (address & bit_mask);
    }

我可以用大约 12 个“If”语句手动完成,但这不是很干净。

谢谢!

4

2 回答 2

1

要简单地反转掩码,请使用~运算符

int not_mask = ~bit_mask;

例如,~0xFFFFFF00 == 0x000000FF

于 2013-04-01T04:18:00.870 回答
0

您可以将其右移(32 - number of mask bits you need)。因此,如果您需要低 8 位,您可以按位右移(32-8 = 24)

于 2013-04-01T04:28:45.457 回答