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;
        }
  • 相关阅读:
    WPF 命令基础
    委托 C#
    Volley网络请求框架的基本用法
    MailOtto 实现完美预加载以及源码解读
    Android_时间服务
    Android_Chronometer计时器
    Android_Json实例
    完结篇
    就快完结篇
    MySQL 选出日期时间最大的一条记录
  • 原文地址:https://www.cnblogs.com/iuyy/p/14371296.html
Copyright © 2011-2022 走看看