算法-32位正整数,只保留最高位的1比特,其余比特清零
2018-02-11 16:25
330 查看
JDK的HashMap源码在rehash创建新的散列表的过程中,初始生成散列表的过程中需要计算最初的散列表的大小,用到了Integer.highestOneBit方法,
这个方法的作用是:对于一个输入的32位的整数,输出中只保留这个整数的最高位比特,其余的比特全部清零。
JDK的计算方法是:
性能应该是一个常量值,位移操作又比较省时间,效果应该很好,请问你还有更好的实现算法么?
比如二分查找法?
这个方法的作用是:对于一个输入的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); }
性能应该是一个常量值,位移操作又比较省时间,效果应该很好,请问你还有更好的实现算法么?
比如二分查找法?
相关文章推荐
- 分析一个统计2进制形式32位整数中1的算法
- 【Java】给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。
- 判断32位整数二进制中1的个数的算法
- (转贴)反转一个字节 和 判断32位整数二进制中1的个数 的算法
- 最快的判断32位整数二进制中1的个数的算法
- 一个全是32位整数的大数组,除了其中一个数字出现2次外,其余的数字都出现了3次。如何找出那个只出现了两次的数字?
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法(ZZ)
- (转贴)反转一个字节 和 判断32位整数二进制中1的个数 的算法
- 反转一个字节和判断32位整数二进制中1的个数等算法
- 判断32位整数二进制中1的个数的算法
- 面试题:元素为32位整数的数组中只有一个数字出现2次,其余都是出现3次,求这个数
- 求32位无符号整数中比特为1的二进制位数
- 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从
- 32位整数转二进制字符串算法
- 算法基础:整数排序问题(连续整数只保留首尾两个数字)
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法(ZZ)
- 算法基础:整数排序问题(连续整数仅仅保留首尾两个数字)
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法
- 32位整数按位反转算法分析
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法