清除MSB到i(包括)的所有位

时间:2012-09-18 18:42:13

标签: bit-manipulation bit

以下是通过i(包括)清除所有MSB(最高有效位)的代码

public int clearBitsMSBThrough(int num, int i) {
    int mask = ( 1 << (i + 1) ) - 1;
    return num & mask;
}

我对“包容性”感到困惑。 例如,如果数字是0011 1010且i = 3。 掩码为0000 1111,结果为0000 1010,但位置3的位不清零。

我误解了这个问题吗? 而且我认为它应该是:

int mask = (1 << i) - 1;

1 个答案:

答案 0 :(得分:1)

public int clearBitsMSBThrough(int num, int i) {    
   int mask = (1 << i) - 1;
   return num & mask;
}

浏览binary subtraction可能会对此有所帮助。