java中的移位操作详解
移位运算,这是一个陌生又熟悉的操作。陌生是指不易理解且不常用,熟悉是指“别人家的开发工程师”在代码中经常使用这种方式进行高低位的截取、哈希计算、乘除法的运算,今天,让我们一起来揭开移位运算的神秘面纱。
Java提供了两种带符号位的移位操作,左移 << 和右移 >>,此外,Java还提供了一种无符号右移操作 >>>。下面我们一起来研究如何正确的使用它们。
带符号位的移位操作规则如下:只有负数右移的时候,高位补1,其他情况的补位,都只补0。
下面以8位二进制的移位进行举例。
10的补码为00001010,左移一位变成20(00010100),右移一位变成5(00000101)
5的补码为00000101,左移一位变成10(00001010),右移一位变成2(00000010)
-99的补码为10011101,左移一位变成58(00111010),右移一位变成-50(11001110)
总结几点注意事项:
- 左移一位近似于乘以2,右移一位近似于除以2。当十进制的奇数时,由于二进制表示的时候最低位为1,右移的时候最低位被舍弃,故不是精准的除以2。
- 左移有可能改变数的正负。如果左移一位的时候,符号位和数值最高位不同,则数的正负发生变化。
- 如果是32位处理器,则移动的位数是一个mod 32的结果,即>>1和>>33是一样的结果,可以理解为在进行移位之前,对要移动的位数先取模运算。
程序验证:
System.out.println(Integer.MAX_VALUE << 1);
输出-2。32位int的最大数为01111111111111111111111111111111,左移一位为11111111111111111111111111111110,表示的十进制数为-2。
System.out.println(Integer.MIN_VALUE << 1);
输出0。32位int的最小数为10000000000000000000000000000000,左移一位为00000000000000000000000000000000,表示的十进制数为0。
无符号位的右移操作规则如下:不管正负数,高位都补0。
总结几点注意事项:
- 正数移动最大位数的最小值为0,负数移动最大位数的最小值为1。因为正数的符号位为0,负数的符号位为1,当移最大位数后,二进制除了最低位为符号位,其他全是0。
java中的移位操作详解相关推荐
- Java中JDBC连接数据库详解
今天动力节点java学院小编分享的是JDBC连接数据库的相关知识,希望通过看过此文,各位小伙伴对DBC连接数据库有所了解,下面就跟随小编一起来看看JDBC连接数据库的知识吧. 一.JDBC连接数据库概 ...
- JAVA中的Random详解
JAVA中的Random详解 首先,在JDK自带的常用的random中有两个,这俩都是产生随机数的,不过一个是util下的random,另外一个是Math下的.我们分别介绍一下 util中的rando ...
- java中new关键字详解
java中new关键字详解 在java中我们可以经常使用new来创建一个对象,但是这对于初学者来说可能只会使用却不能理解new关键字和它的语法 new关键字的语法 注意使用前先导包,一般我们使用ide ...
- Java中super关键字详解
Java中super关键字详解 super有什么用? super什么时候不可以省略呢? super在内存图中是如何存在的呢? super使用时的注意事项 super有什么用? (1)当子类中构造方法第 ...
- Java中的byte详解
Java中的byte详解 介绍 byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数. 在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在 ...
- Java中Iterator迭代器详解
目录 一.Java中Iterator迭代器详解 1.为什么需要迭代器 2.迭代器长什么样子 3.如何使用迭代器 使用步骤: 代码演示: 迭代器可以简化为增强型for循环: 4.Iterator与Lis ...
- Java 中IO流详解(附实例代码/面试题)
Java I/O流详解 前言 一.I/O流是什么? 二.IO流分类: 1. 流程图: io流对象 2. io流的优缺点: 3. io 流Java中用途有哪些? 三.一些 io 实例 四.面试题: 前言 ...
- 【转载】java中泛型使用详解
引入 Type接口 Class类 Method类 Field类 ParameterizedType接口 TypeVariable接口 类中定义泛型变量 方法中定义泛型变量 方法中泛型参数和泛型返回值 ...
- java 中的vector_详解Java中的Vector
Vector实现了AbstractList抽象类和List接口,和ArrayList一样是基于Array存储的 Vector 是线程安全的,在大多数方法上存在synchronized关键字 //Vec ...
最新文章
- 获取BT节点信息bittorrent-discovery
- repo 修改邮箱地址
- redis面试全家桶
- (转)SpringBoot系列—Redis使用
- 数据的交换输出【杭电-2016】 附题
- 【蓝桥官网试题 - 算法提高】change(思维)
- 解决:Could not find or load main class org.apache.rocketmq.example.quickstart.Producer
- SQL笔记-检索出ID为Int或Long中不连续的第一个点
- 衡量失败检测算法的指标
- 如何配置filezilla服务端和客户端
- C语言源代码编译全过程
- 杨校老师课堂之Hadoop环境搭建(一)
- ae去闪插件deflicker使用_Ae/Pr视频去闪烁插件REVisionFX DEFlicker v1.7.1 Win大众脸已注册...
- windows server 2016 活动目录部署系列(三)加入域且创建域用户
- 阿里云centos6.9搭建ngrok服务器
- 解决ZeroDivisionError: integer division or modulo by zero问题
- 虹膜识别1.opencv3同心圆的提取
- 电商翻身受宠社交成大势 2019上市科技股大盘点
- 常用日本语1000句+简单用语
- OSChina 程序员节乱弹 ——看程序员如何优雅地生活
热门文章
- java在excel模块中新增sheet_JAVA分多个sheet写入excel
- 学习率(Learning rate)的理解及调整依据
- 【项目实训】UE4物件质量设置相关
- 广东企业电子申报管理系统——官方软件下载
- html空格符nbsp
- 戴尔linux u盘启动不了怎么办,u盘启动盘启动不了怎么回事_解决u盘启动盘启动不了的方法...
- 【BZOJ4570】 [Scoi2016]妖怪
- B.FRIENDit壁虎忍者G2游戏鼠标 台式笔记本外接电竞LOL背光游戏鼠标
- Vue 笔记【视频参考尚硅谷】持续更新2022/3/22...
- 音质好的蓝牙耳机推荐,分享四款音质不错的蓝牙耳机