和一个掩码来寻址(需要较低的位)C#

时间:2013-04-01 04:12:42

标签: c#

所以我知道我可以将一个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”语句手工完成,但这不是很干净。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

int not_mask = ~bit_mask;

例如,~0xFFFFFF00 == 0x000000FF

答案 1 :(得分:0)

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