java位运算分析
java位运算
java位运算在平常的编码过程中十分场景,通常框架都替我们封装好了,我对于细节方面反而一知半解,下面就重新梳理一下。
优秀的框架使得我们轻松,也使得我们距离真相越来越远。
位运算种类
- 左移、右移
- 与或
使用场景
左移、右移
左移和右移是比较简单的位运算,简单来说,就是把二进制值向左或向右移动
对于数据来说,左移N位就是乘于2的N次方,右移同理。 举例:
数值8对于的二进制值为 1000 =(1*2*2*2 + 0*2*2 + 0*2 +0)
对数值8进行左移1位操作,等于在1000的基础上,左移以为,得到 10000 = (1*2*2*2*2 + 0*2*2*2 + 0*2*2 + 0*2 +0) = 16
∴ 左移N位就是乘于2的N次方
与运算 &
- 二进制值,按位相与,都为1时才为1,其他为0
举例说明:
1100011 &
1001111
=1000011
- 对于2的n次方取余,相当于对2的n次方减一取与运算,n为正整数。
- 对于2的N次方取余 == 对于2的N次方-1取与
- 2的N次方为 10000, 2的N次方-1为 1111
- 基于上面的结论,来看待HashMap的扩容机制
- HashMap扩容时,size的大小为2的N次方,有两个原因
- 扩容时,重新计算数据的位置,变化较小
- size为2的N次方时,计算位置可以使用[hash & (n - 1)],效率更高
- HashMap扩容时,size的大小为2的N次方,有两个原因
- 二进制值,按位相与,都为1时才为1,其他为0
或运算 |
- 二进制值,按位相或。有一个为1,则为1
java位运算分析的更多相关文章
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- Java位运算总结:位运算用途广泛《转》
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java位运算原理及使用讲解
前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...
- (转)java位运算
转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非) public class Test { public static ...
- Java位运算总结:位运算用途广泛
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java 位运算超全面总结
1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...
- 我们必须要了解的Java位运算(不仅限于Java)
本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...
- leetcode:single-number-ii(Java位运算)
题目 Given an array of integers, every element appears three times except for one. Find that single on ...
- Java位运算实现加减乘除四则运算
本文是继<一文了解有趣的位运算>的第二篇文章. 我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平.无论多么复 ...
- Java位运算经典实例
一 源码.反码.补码 正数的源码.反码.补码相同,例如5: 5的源码:101 5的反码:101 5的补码:101 负数的源码.反码.补 ...
随机推荐
- LeetCode-688 骑士在棋盘上的概率
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/knight-probability-in-chessboard 题目描述 在一个 n x n 的 ...
- asp多模块功能代码,单调用插入的case方法
function getmodule(arg) select case arg case "pinyin" aaa="123" %><!--#插入页 ...
- 时钟切换电路(无毛刺)——clock switching glitch free
0.引言 随着越来越多的多频时钟被应用在今天的芯片中,尤其是在通信领域中,经常需要在芯片运行时切换时钟线的源时钟.这通常是通过在硬件中复用两个不同的频率时钟源,并通过内部逻辑控制多路选择器选择线来实现 ...
- JavaScrip核心基础(讲师李立超)
01_入门 01_HelloWorld <!-- JS代码需要编写到script中 --> <script> alert("哈哈哈哈") console.l ...
- CF单机版终极猎手30人版安装教程
本游戏是CF的单机版本,内含终极猎手30人版,可变身四种终极猎手.这个版本只有这一种模式,没有其他的幽灵模式.生化模式.爆破模式.团队模式等等,如果想玩上述的模式,你可以在其他地方找.值得注意的是这个 ...
- Git 知识
1.git merge .git cherry-pick.git rebase 可以看出merge结果能够体现出时间线,但是rebase会打乱时间线. 而rebase看起来简洁,但是merge看起来不 ...
- java开发细节
Java开发细节 Java源文件以.java 为扩展名.源文件的基本组成部分为类(class),如本类中的Hello类 Java应用程序的执行入口是main()方法.它有固定的书写格式: public ...
- redis 单节点迁移到集群 redis-shake
1.迁移 1.1.同步到单节点 redis-shake下载 release-v2.1.2-20220329.tar.gz #redis cluster 某一个节点 服务器安装redis-shak ...
- 关于el-popover的箭头颜色
因为会从四个方向不定弹出 所以需要写入4个方向: 注意弹出框是动态插入body中的,需写入根部样式中 如果有多个地方用到且颜色都不一样,可以用类名区分,elm提供了 然后把前面的 .el-popper ...
- grafana+prometheus+tomcat 监控tomcat
一.前提 1.tomcat作为java项目首选的部署容器.但是,在做测试,或者是在运维管理生产服务器的时候,想要监控tomcat的实时运行情况,却不是那么容易的 2.grafana(已安装和prome ...