您的位置:首页 > 其它

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

2018-02-11 16:25 330 查看
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);
}


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

比如二分查找法?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐