算法-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);
    }

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

比如二分查找法?

posted on 2018-02-11 16:25  itat  阅读(464)  评论(0编辑  收藏  举报

导航