ConcurrentHashMap中的2的n次方幂上舍入方法(转)

 

最近看JDK中的concurrentHashMap类的源码,其中有那么一个函数:

/**
     * Returns a power of two table size for the given desired capacity.
     * See Hackers Delight, sec 3.2
     */
    private static final int tableSizeFor(int c) {
        int n = c - 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;
    }

看不明白这是做什么的,但是后来我查看了《hackers delight》(中译:高效程序的奥秘)这本书,才知道这个函数是用来计算c的上舍入到2的n次幂。书上的函数如下图:

已经把《hackers delight》加入书单。

http://www.cnblogs.com/katsura/p/4134737.html

 

时间: 2025-01-20 10:42:17

ConcurrentHashMap中的2的n次方幂上舍入方法(转)的相关文章

在Dreamweaver中输入平方、立方等幂格式的方法

用Dreamweaver制作网页时,有时需要输入一些数学方面幂格式的东西,比如这个等式:y=2X3.在这个等式中X右上角的那个数字,在排版时的称呼应该叫"上标":反之,如果这个数字是在X的右下角,则称之为"下标". "上标"对应的html标签是sup("下标"对应的是sub标签),如果对html熟练可以在Dreamweaver"代码视图"中直接输入html代码:y=2X<sup>3</su

EXCEL中公式运算及N次方函数写法

比如,1.2的N次方? =POWER(1.2,3) 1.2的3次方 EXCEL中求"10的N次方"函数公式是? =10^N 请问在EXCEL中如何输入数据的n次方 直接在里面把结果算出来,但是加上等号以后就不行,怎么办 计算x的n次方,可以写为x^n 也可以用power函数,写为power(x,n) power函数也可以用来开n次方,写为power(x,1/n)

jQuery中ajax的使用与缓存问题的解决方法

本篇文章主要介绍了jQuery中ajax的使用与缓存问题的解决方法.需要的朋友可以过来参考下,希望对大家有所帮助 1:GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配] 所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果   POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的)   防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之

jQuery中ajax的使用与缓存问题的解决方法_jquery

1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的) 防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之就是使每次访问的URL字符串不一样的] 设计WEB页面的时候 也应该遵守这个原则 2:一.谈Ajax的Get和Post的区别

asp中利用数组实现数据库记录的批量录入方法

数据|数据库|数组 asp中利用数组实现数据库记录的批量录入方法(原创) 演示:http://www.zwtd.com/1/yanek/n/needdj2.asp <% rem 文章题目 asp中利用数组实现数据库记录的批量录入方法(原创)作者:yanek联系email:aspboy@263.net%> 包括两个文件 1.allneeddj.asp:实现表单的生成 2. allneeddjresult.asp 处理表单批量录入 3.hbedu.mdb :数据库文件 其数据库结构如下 provi

电脑中通过修改无线路由信道提高网速的方法

电脑中通过修改无线路由信道提高网速的方法          1.在浏览器中输入路由器管理界面地址(路由器背面有标注),并登录(路由器背面有标注); 2.点击"无线设置"-"基本设置"; 3.在"信道"右侧的下拉菜单中选择选择6或11,因为这两个信道不会受到其他无线设备的互相干扰,点击保存即可; 4.设置之后可以看到网速确实快起来了. 以上介绍的便是在电脑中通过修改无线路由信道提高网速的方法.

PHP统计数值数组中出现频率最多的10个数字的方法

  这篇文章主要介绍了PHP统计数值数组中出现频率最多的10个数字的方法,涉及php中array_count_values与arsort等方法的相关使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了PHP统计数值数组中出现频率最多的10个数字的方法.分享给大家供大家参考.具体分析如下: 该问题属于TOPK范畴,统计单词出现频率,做报表,数据统计的时会常用! php代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //随机生成数值数组

ajax-jsp中我用go(-1)回滚到上一页面,并且回滚后的当前页面刷新一次,要详细的!

问题描述 jsp中我用go(-1)回滚到上一页面,并且回滚后的当前页面刷新一次,要详细的! jsp中我用go(-1)回滚到上一页面,并且回滚后的当前页面刷新一次,要详细的,谢谢! 解决方案 history.go或者back后退页面是不会更新的,用response.redirect跳转到你的页面再加个时间戳参数防止缓存

LI标签中内容超过长度后以省略号显示的方法

在使用DIV+CSS网页标准制作网页时,LI标签中内容超过长度后以省略号显示的方法. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><meta http-equiv="Content-Type" content="text/html; charset