java >> 和 >>> 以及 >>>= 的区别

可能大家都知道java中>> 和 >>> 的区别,那这里我也啰嗦一下,>> 和 >>> 都是右移操作,只不过>>>是无符号右移,也就是右移之后高位补零。对于正数来说,两者没有什么区别,但是对于负数来说,>> 右移之后还是负数,而>>>右移之后就变成了正数,大家可以参看一下例子:

1 public classShiftTest {2 public static voidmain(String[] args) {3 int n = 15;4 System.out.println(java.lang.Integer.toBinaryString(n));5 System.out.println(n >> 2);6 System.out.println(n >>> 2);7

8 int m = -15;9 System.out.println(java.lang.Integer.toBinaryString(m));10 System.out.println(m >> 2);11 System.out.println(m >>> 2);12 }13 }

输出结果 1111

3

3

11111111111111111111111111110001

-4

1073741820

此例以及结果大家一定也能看明白,唯一要注意的是计算机是以补码的形式存储的,大家可以去查看相关资料。那接下来就说一下 >>> 和 >>>= 的区别(因为有一次同学翻看ThreadLocal源码的时候,发现了cleanSomeSlots方法里有>>>=这个操作符,以前没有见过这个操作,只知道>>>是无符号右移,于是我们就讨论起来),我当时写了一段测试代码,如下所示:

1 public classShiftTest {2 public static voidmain(String[] args) {3 int n = -4;4 System.out.println(n >>>= 1);5 System.out.println(n >>> 1);6

7 int j = 4;8 System.out.println(j >>>= 1);9 System.out.println(j >>> 1);10 }11 }12

输出结果 2147483646

1073741823

2

1

从此例中,大家可能比较疑惑了,第9行为什么会输出1,应该是2啊,我也比较纳闷,这个时候同学一点拨,就恍然大悟,其实j在第8行被重新赋值了成了2,而第9行再进行右移当然输出1。从这个例子中我们就知道了其实>>>=就是类似于+=这种操作,右移之后做了一个赋值。

总结

其实移位操作在我们平时用的并不多,但是在阅读JDK源码的时候经常会出现,比如concurrent包里的ThreadPoolExcutor、ConcurrentHashMap等。所以掌握移位操作以及原码、反码、补码、还是很有必要的。

java 和 区别_java 和 =的区别相关推荐

  1. java 短路判断_java中和的区别(|和|同理)

    在java的基础面试题中肯定有这个问题: &和&&的区别? 这个问题很好回答,核心思想就是一个不短路一个短路的问题. 首先说下&, 1.它可以表示二进制中的位运算 分析 ...

  2. java和c++的区别_JAVA和C++区别详解

    JAVA和C++区别详解 来源:-- 作者:-- 浏览:811 时间:2016-08-10 14:18 标签: 摘要: 1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然 ...

  3. java堆栈区别_JAVA堆栈的区别

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  4. java list set map的区别_Java集合类List/Set/Map的区别和联系

    Java集合类List/Set/Map的区别和联系 一.Array , Arrays Java所有"存储及随机访问一连串对象"的做法,array是最有效率的一种. 1. 效率高,但 ...

  5. java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  6. Java中string与String区别_JAVA中String与StringBuffer的区别

    JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...

  7. java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

    本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...

  8. java long 区别_java中long和int的区别

    java中long和int的区别 发布时间:2020-06-26 15:37:48 来源:亿速云 阅读:191 作者:Leah 这篇文章将为大家详细讲解有关java中long和int的区别,文章内容质 ...

  9. Java单精度与双精度区别_java单精度和双精度的区别

    为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽,而精 ...

最新文章

  1. ADT 怎么删除logcat过滤规则
  2. 防Xss攻击,包含富文本编辑器的处理
  3. POJ 3322 Bloxorz I(BFS)
  4. 【2017年第1期】基于征信数据观中国近10年产业间信贷资源的调整路径
  5. 放弃Venn-Upset-花瓣图,在线拥抱二分网络
  6. Python: SystemError: Unknown opcode
  7. 教育部建议采纳:给予导师决定硕博士能否毕业的自主权!
  8. 你想在网易云音乐中播放 QQ 音乐中下载的歌曲吗?用上它后助你秒实现!
  9. oracle交接单,系统交接单模板.docx
  10. 技术分析是我的唯一信仰
  11. 软考(软件设计师)中的一些总结
  12. 力扣每日一题-10-121.买股票最佳时机
  13. 高通QPST Download使用方法
  14. mongodb 存储过程 遍历表数据_使用MongoDB存储数据
  15. 启用计算机来宾账号,开启Windows 10来宾账户
  16. 基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置
  17. 计算机安全之网络安全议论文,网络安全800字议论文
  18. Django 学习记录
  19. Java实现excel大数据量导出
  20. 一步移民加拿大,BC省雇主担保移民项目

热门文章

  1. python hbase_Python操作Hbase
  2. oracle视图失效,ORACLE 11Gr2 V$ARCHIVED_LOG视图过期信息
  3. php编程对联,形容程序员的对联大全
  4. ap协议java_AP计算机科学A:Java编程类和对象
  5. 鸿蒙系统有无隐私空间,华为鸿蒙OS系统有隐私空间功能吗 华为p40使用鸿蒙系统体验评测...
  6. 表格布局页面_对于表格布局管理器的回顾以及接下来的目标
  7. 【图像超分辨率】RS Image SR Based on Visual Saliency Analysis
  8. mysql 基于时间分区_MySQL基于时间字段进行分区的方案总结
  9. CentOS 6.5 安装配置Tomcat7服务器
  10. Eigen入门之密集矩阵 10 - 矩阵的行优先及列优先存储