0

下面是关于通过 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;
4

1 回答 1

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

在这方面略读二元减法可能会有所帮助。

于 2014-09-29T01:32:37.947 回答