欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:988
  2. 浏览总数:12,219,151
  3. 评论:3982
  4. 分类目录:106 个
  5. 注册用户数:6259
  6. 最后更新:2019年1月14日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

Java中>>和>>>移位操作符的区别

  大家都知道>是比较两个对象的大小,那>>和>>>的区别呢?
  >>和>>>都是移位操作;对正数的移位操作它们的功能都是一样的,如下:

15 >> 2 = 3
15 >>> 2 = 3

其实就是将15除于4,得到的商。转换为二进制可能更直观(为了方便,下面的二进制操作我们都是以八位进行的,而不是32位):

0000 1111 >> 2 = 00000011 = 3,低位被丢失了
0000 1111 >>> 2 = 00000011 = 3,低位也被丢失了

对正数的操作它们的效果都是一样的,那么对于负数的移位是否也是一样呢?看下面例子就知道了:

-15 >> 2 = -4
-15 >>> 2 = 60

怎么会是这样的?负数的移位操作怎么变成正数了?同样我们将上面的式子转换为二进制来看看。首先我们得知道,在计算机中,负数是以补码的形式存储的(补码不知道?那你自己去好好学习点基础知识吧!)-15的补码是11110001,所以上面的操作转换为二进制如下所示:

11110001 >> 2 = 11111100(还是一个负数,转换为十进制就是-4)
11110001 >>> 2 = 00111100(这变成了正数了,转换成十进制就是60)

  根据上面的结果,我们可以清楚的看出:

  1、当移位的数是正数的时候,>> 和>>>效果都是一样的;
  2、当移位的数是负数的时候,>>将二进制高位用1补上,而>>>将二进制高位用0补上,这就导致了>>>将负数的移位操作结果变成了正数(因为高位用0补上了)。
本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Java中>>和>>>移位操作符的区别】(https://www.iteblog.com/archives/740.html)
喜欢 (11)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(2)个小伙伴在吐槽
  1. 能坚持写博客,至少也是个有恒心的人,赞一个癸巳年(蛇)八月十九 2013-9-23
    天行者2013-09-23 10:11 回复