算法-32位正整数,只保留最高位的1比特,其余比特清零

JDK的HashMap源码在rehash创建新的散列表的过程中,初始生成散列表的过程中需要计算最初的散列表的大小,用到了Integer.highestOneBit方法,

这个方法的作用是:对于一个输入的32位的整数,输出中只保留这个整数的最高位比特,其余的比特全部清零。

JDK的计算方法是:

    public static int highestOneBit(int i) {
        // HD, Figure 3-1
        i |= (i >>  1);
        i |= (i >>  2);
        i |= (i >>  4);
        i |= (i >>  8);
        i |= (i >> 16);
        return i - (i >>> 1);
    }

性能应该是一个常量值,位移操作又比较省时间,效果应该很好,请问你还有更好的实现算法么?

比如二分查找法?

转载于:https://www.cnblogs.com/dongyuanshi/p/8442496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值