a = 5, 返回 8;

a = 13, 返回 16;

a = 1021, 返回 1024;

位运算知识储备

**1.左移**

->左移运算符“<

->左移m<

**2.右移**

右移运算符“>>” - 使指定值的所有位都右移规定的次数。

右移m>>n 代表把数字m除以2的n次方,原来是正数的还是正数,负数还是负数。

注意,如果是单数,也就是二进制末位为1,则结果是将m除以2的n次方的整数商。

**3.无符号右移**

无符号右移运算符“>>>” - 同右移,但是结果全变正数。

方法1:右移,找到 最高非0位 为第几位

static final int tableSizeFor1(int cap) {

int n = cap >> 1;

int length = 0;

while (n != 0){

n = n >> 1;

length ++;

}

return 2 << length;

}

方法2:

static final int tableSizeFor3(int cap) {

int length = 1;

while (length < cap) {

length <<= 1;

}

return length;

}

hashmap的实现方式:

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 + 1;

}

简单说明:

为什么右移到16位,可以得到的最大值是32个1 ?

11111111 11111111 11111111 11111111

这个是因为java的int类型用4个字节32位来进行存储的,再往后也没有意义了

int类型占4个字节(byte);

一个字节=8bit(位);

一个int类型的数值占32bit(位)int i = 123;

10进制123转为二进制后等于:1111011 。完整补位后:00000000 00000000 00000000 01111011

循环测试后,该方案最佳(不愧是jdk自带的)

参考链接:

java a的2次方_java-获取比a大,最接近a的2的次方的数(最小二次幂,位运算)相关推荐

  1. java生成随机数的方法_Java获取随机数的3种方法

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  2. java取路径含中文_java获取项目路径中文乱码

    以下内容转自:http://blog.csdn.net/dream_broken/article/details/31762807# 项目的文件名称推荐都是英文名称,但是有时不可避免使用了中文,获取项 ...

  3. java中的字段是_Java – 获取类中特定数据类型的字段

    原文链接作者:mkyong 译者:王乐(2270134103@qq.com) 一些Java反射API的例子. 1.显示所有字段和数据类型 使用反射遍历一个类声明的所有字段. CompanyA.java ...

  4. java取网页源码_Java获取任意http网页源代码的方法

    本文实例讲述了JAVA获取任意http网页源代码.分享给大家供大家参考,具体如下: JAVA获取任意http网页源代码可实现如下功能: 1. 获取任意http网页的代码 2. 获取任意http网页去掉 ...

  5. java 优酷视频缩略图_java获取优酷等视频缩略图

    类型:Android平台大小:6.8M语言:中文 评分:7.2 标签: 立即下载 想获取优酷等视频缩略图,在网上没有找到满意的资料,参考了huangdijia的PHP版工具一些思路,写了下面的JAVA ...

  6. java 各组件单击总数_java 获取面板上有多少个组件

    展开全部 import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java ...

  7. java取字符串首字母_java 获取中文字符的首字母

    原理: GB2312编码中的中文是按照拼音排序的 注意: 一些生僻的字无法获得正确的首字母,原因是这些字都是后加入的. import java.io.UnsupportedEncodingExcept ...

  8. java脱机是什么意思_java获取本地打印机,以及判断打印机是否脱机状态

    java获取本地打印机,以及判断打印机是否脱机状态 java获取本地打印机,以及判断打印机是否脱机状态 文章中所有返回的类型,是自定义RestFul接口返回类型,你们也可以直接返回数组 如果要看res ...

  9. java获得当月法定工作日_java获取当月的工作日

    在这个记录一下,记录java获取某个月的工作日的代码,方便以后查看! import java.util.ArrayList; import java.util.Calendar; import jav ...

  10. java 取当天0点_java 获取当天(今日)零点零分零秒

    两种方法 一种得到的是时间戳,一种得到是日期格式: 1.日期格式的 Calendar calendar = Calendar.getInstance(); calendar.setTime(new D ...

最新文章

  1. Microbiome:在人工肠道中建立动态线性模型指导设计和分析微生物组研究
  2. linux c 调用 so 库
  3. 树莓派使用STEP6:安装git
  4. 云原生数据湖解决方案打破数据孤岛,大数据驱动互娱行业发展
  5. android4.0蓝牙使能的详细解析 (转载)
  6. Divide Groups(分组)(二分图染色)
  7. 网易邮箱服务器怎么注册,免费网易域名邮箱申请教程
  8. 方法论-5W2H七问分析法
  9. MFC银行卡卡号验证程序
  10. 苹果计算机怎样恢复桌面,mac桌面整理_使Mac桌面恢复整洁的四种技巧
  11. 数据库课程设计(电脑配件库存管理系统)
  12. python用 requests 模块从 Web 下载文件
  13. 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录
  14. [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结
  15. CS144-Lab3
  16. cmd什么指令可以清除后台进程
  17. C#登录窗体代码设计
  18. 2022年东南大学930人工智能专业基础考研经验分享(附带资料)
  19. 万国数据:“为了全方位保障混合云数据中心的安全,我们连猫都养了十只。”...
  20. 程序员接私活的几个平台和建议,避免掉坑!

热门文章

  1. P2906 [USACO08OPEN]牛的街区Cow Neighborhoods
  2. 如何做好会员营销 三步教你看懂会员管理
  3. HTML + CSS实现图片3D旋转效果
  4. uniapp本地存储
  5. java实现网站的访问量_如何实现对网站页面访问量的统计(javaweb和php)
  6. python中id是什么意思_什么是python的id函数
  7. 数据库出货加权平均成本计算问题
  8. U-DIMM、SO-DIMM、FB-DIMM、Reg-DIMM区别
  9. ckplayer 网页视频播放插件
  10. 异常检测的总结性介绍