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

本文介绍三种高效生成整数掩码的方法,包括使用Integer.highestOneBit方法、通过位运算左移与按位与操作,以及快速扩展最高位1至整个掩码的技术。这些方法适用于不同场景,帮助程序员在处理二进制数据时提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值