求一个数字的掩码的方法总结

对于 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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值