zoukankan      html  css  js  c++  java
  • 求解大于或等于某个4字节正整数的最小2次幂

    下面来自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返回。。

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

    Java7 相关代码:

    static final int highestOneBit(int i) {
            i |= i >>> 1;
            i |= i >>> 2;
            i |= i >>> 4;
            i |= i >>> 8;
            i |= i >>> 16;
            return i - (i>>>1);
        }

    将某个数二进制形式的所有位,置1代码:

       int Help(int x) {
            x |= x >>> 1;
            x |= x >>> 2;
            x |= x >>> 4;
            x |= x >>> 8;
            x |= x >>> 16;
            return x;
        }
  • 相关阅读:
    centos 修改语言、时区
    去除 ufeff
    Docker介绍及使用
    消息队列
    数据结构与算法
    Haystack
    Python面向对象之魔术方法
    关于Redis处理高并发
    Redis
    RESTful规范
  • 原文地址:https://www.cnblogs.com/iuyy/p/14371296.html
Copyright © 2011-2022 走看看