<>(右移)皆属于位运算符.其运算比乘除快,所以我们可以用其优化代码。

<

规则则是带符号位移,高位移出,低位补0,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。

Integer i = 7;

message(Integer.toBinaryString(i));int moveNum = 3;

message(i<

message(Integer.toBinaryString(i<

输出结果

the value is :111the value is :56the value is :111000

从上面代码可以看出确实能证明,左移n为,相当于乘以2的n次方。如何验证其带符号位位移呢?看下面的例子

Integer i = 1;

message(Integer.toBinaryString(i));int moveNum = 31;

message(i<

message(Integer.toBinaryString(i<

输出结果

the value is :1the value is :-2147483648the value is :10000000000000000000000000000000

从上面的输出结果可以看出,左移确实是带着符号位移动,向左移动了31位,1就移动到了最前面,也就是符号位上,得到了一个特殊的值,也就是-0的补码,用来代表-2的3次方。如果这个不懂,可以去看下源码反码补码的博客.

Integer i = -7;

message(Integer.toBinaryString(i));int moveNum = 33;

message(i<

message(Integer.toBinaryString(i<

输出结果

the value is :11111111111111111111111111111001the value is :-14the value is :11111111111111111111111111110010

由上面的代码可以看出,我们左移的位数是33位,实际上却只左移了1位,证实了上面所说的移动位数超过该类型的最大位数,则进行取模

>>右移

规则则是低位移出,高位补符号位,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。

Integer i = -7;

message(Integer.toBinaryString(i));int moveNum = 1;

message(i>>moveNum);

message(Integer.toBinaryString(i>>moveNum));

输出结果

the value is :11111111111111111111111111111001the value is :-4the value is :11111111111111111111111111111100

上面的二进制都是补码的形式,不要疑惑这个。可以看出上面的二进制代码,向右移动一位,然后在其高位补符号位,正数补0,负数补1.

Integer i = 7;

message(Integer.toBinaryString(i));int moveNum = 34;

message(i>>moveNum);

message(Integer.toBinaryString(i>>moveNum));

输出结果

the value is :111the value is :1the value is :1

上面的代码,左移34位,实际上却只左移了两位,已经做过取模了。由于是正数,高位补0。

>>> 无符号右移

无符号位移是什么意思呢,就是右移的时候,无论正负数,高位始终补0。当然,它也仅仅针对负数计算有意义。

Integer i = -7;

message(Integer.toBinaryString(i));int moveNum = 1;

message(i>>>moveNum);

message(Integer.toBinaryString(i>>>moveNum));

输出结果

the value is :11111111111111111111111111111001the value is :2147483644the value is :1111111111111111111111111111100

上面代码中,右移一位后的值,其高位省略了一位0,我们来计算其值。

就是2的31次方 - 1 - 2º-2¹,其结果为2147483644

<<< 无符号左移

为什么没有这个呢?大家可以想一下。

————————————————

原文:https://blog.csdn.net/koreyoshi326/java/article/details/85008708

java左移和右移_java 位运算 之 左移和右移理解相关推荐

  1. 【Python位运算】——左移操作(<<)右移操作>>

    目录 左移操作 右移操作 其他博主的理解 应用--力扣题目78. 子集 解法 深度优先搜索 位运算 参考文献 左移操作 # 左移操作,左移一位相当于乘以b,a<<b,a' = a*(2^b ...

  2. java double 位运算_JAVA位运算等运算符总结

    JAVA位运算等运算符总结 一.概述 运算符是一种"功能"符号,用以通知 Java 进行相关的运算. Java 语言中常用的运算符可分为如下几种:算术运算符 赋值运算符 比较运算符 ...

  3. java 位运算符在实际开发中的用处_java 位运算 和实际应用

    public class Test { public static void main(String[] args) { // 1.左移( < // 0000 0000 0000 0000 00 ...

  4. java加减_Java位运算实现加减乘除

    一.加法 a+b 举例实现:13+9=22 13+9不考虑进位结果为12 只考虑进位结果为10 和刚好是22. 13二进制为1101,9二进制为1001. 不考虑进位结果为0100.算式为a^b 只考 ...

  5. java取余位运算_java位运算

    位移动运算符: < 例如:3 <<2(3为int型) 1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011, 2)把该数字高位(左侧 ...

  6. java取余位运算_Java位运算基础知识

    在学习Java运算时,补充学习Java位运算. Java位运算 位运算都是针对整数的补码进行位运算. & 按位与运算 先将整数转换为补码 ,然后执行按位与运算,最后将结果返回为十进制,它有如下 ...

  7. java符号位_java 位运算符号

    <道生一,一生二,二生三,三生万物>出自老子的<道德经>第四十二章.主要讲述了一.二.三这几个数字,并不把一.二.三看作具体的事物和具体数量.它们只是表示"道&quo ...

  8. 位运算之左移右移运算之详解

    先看如下一段左移右移的代码及其结果: 代码 #include "stdio.h" char leftshift(char i, int n) { if(n < 0) retu ...

  9. java 无符号运算_java位运算和无符号运算

    计算机在底层使用的是二进制补码进行运算. 计算规则: 正数的原码.反码.补码是其二进制本身. 负数的原码首先计算其二进制数,然后最高位使用1表示负数,反码是最高位不变其它位取反,补码是在反码的基础上进 ...

  10. java位非_Java 位运算(移位、位与、或、异或、非)

    public class Test { public static void main(String[] args) { // 1.左移( << ) // 0000 0000 0000 0 ...

最新文章

  1. [three.js]学习笔记
  2. 使用Spring Boot开发Restful程序
  3. 四年级信息技术认识计算机,四年级信息技术第三课信息工具知多少
  4. 水晶报表-控制结构-For 循环(Crystal 语法)
  5. 垂直居中——登录界面
  6. mvn本地库导入jar包
  7. ajax请求在线库,跨域 jQuery库ajax请求
  8. 作品拍卖价碾压毕加索,没有灵魂的 AI 灵魂画手有怎样的未来?
  9. 判断客户端是否安装FlashPlayer及版本
  10. 通过sql脚本可以从数据库中查到数据,但是通过jdbc却获取不到
  11. 30分钟用flex测试FDS
  12. 中南天坑专业到武大计算机的考研分享~
  13. Java读取文件的N种方法
  14. C语言——单词精确查找
  15. ubuntu自带Firefox安装flash插件
  16. iPhone开发 - 3D - 建立3D界面(下)
  17. 成功解决 HP1010在WIN7下打印速度慢问题
  18. linux的c文件报错for,linux c 编译错误 conflicting types for 的解决办法
  19. 福建食用菌产业博览会盛大开幕 谋定中国农民丰收节交易会
  20. cygwin+编译php,Windows 下:cygwin编译 HTS 安装

热门文章

  1. puppet on windows
  2. 你有想过,如何用Hadoop实现【倒排索引】?
  3. ecshop模板支持php,让ecshop模板支持php运算
  4. excel文件打不开怎么办_移动硬盘打不开提示格式化怎么办?
  5. 洛谷P5960 【模板】差分约束算法
  6. 一文读懂 MySQL 事务隔离机制
  7. 第11章 枚举与泛型总结
  8. 【高级持续性威胁追踪】来自Mustang Panda的攻击? 我兔又背锅了!
  9. python greedy 加油次数
  10. 期货从业有哪些公式要背?