对于 00000101,它的掩码为 00000111。
1 使用Integer.highestOneBit(int num)方法,如101调用这个方法得到4(100),然后左移一位减1得到掩码(速度最慢)
int mask = (Integer.highestOneBit(num)<<1)-1;
2 把值为1的mask左移30位,使1放在最高位剩下位为0,然后和num做&运算,直到不得0为止mask要一直右移,此时mask的停留在num的最高位1处,然后左移一位减1得到掩码
int mask = 1 << 30;
while ((num & mask) == 0) mask >>= 1;
mask = (mask << 1) - 1;
3 用num与num左移的数字做或运算赋给num(速度最快),例如对于 10000000 这样的数要扩展成 11111111,可以利用以下方法:
mask |= mask >> 1 11000000
mask |= mask >> 2 11110000
mask |= mask >> 4 11111111
int mask = num;
mask |= mask >> 1;
mask |= mask >> 2;
mask |= mask >> 4;
mask |= mask >> 8;
mask |= mask >> 16;