首页 > 其他 > 详细

求解大于或等于某个4字节正整数的最小2次幂

时间:2021-02-04 12:18:07      阅读:36      评论:0      收藏:0      [点我收藏+]

下面来自Java8 HashMap的部分源码:

    static final int MAXIMUM_CAPACITY = 1 << 30;
    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }
int n = cap - 1;
/**为了应对参数cap恰好是2的整数幂情况**/

注意:这里右移的过程中是按指数形式(1,2,4,8,16)的长度移位,不是一次仅仅移一位!

本质上求一个大于等于某个整数的2次幂:

1:如果这个数字恰好就是2的整数幂,则直接返回。

2:否则将这个数的2进制形式的数的所有位,置为1,然后在加1返回。。

补充:>> 有符号有移,>>> 无符号右移。

求解大于或等于某个4字节正整数的最小2次幂

原文:https://www.cnblogs.com/iuyy/p/14371296.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!