无符号右移-1?关于Java位移,多数人不知道的

之前看java源码的时候,看到有一个语句,整型无符号右移一个负数(如1024>>-22),当时惊呼:“还有这种操作,老师没教过啊”,老师确实没教过!
当时网上查了一下,发现:对于int类型,移位操作只关注移位参数转换成二进制后对应的后5位(bit);long则只关注后6位
举个栗子:

System.out.println(1024 >>> 10 == 1024 >>> 42);// true
System.out.println(1024 >>> 10 == 1024 >>> -22);// true

其中,10转换成二进制后是1010,42转换成二进制后是10101,-22转换成二进制后是11111111111111111111111111101010,所有的都是最后5个bit是01010,所以无符号右移之后都相等。
印象中应该不少书都没讲解到这个知识点,上大学的时候,老师更加没提过这个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文是对论文《The Z1: Architecture and Algorithms of Konrad Zuse...
    逸之阅读 4,515评论 15 12
  • 背景 在java中float赋值给double,会产生精度问题。 输出为2.0999999046325684。 小...
    我叫小小强阅读 19,343评论 2 23
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 690评论 0 0
  • 谨记: 上帝在缔造每个人的时候,给予每个人的一切都是相同的,然而,人与人却是存在如此大的差距,记着上帝为你关上了一...
    长风留言阅读 5,136评论 0 5
  • 十月是苍白的寒意, 是孤独 是北方 我喜欢四月,却活在十月 绚丽的南方 樱花和骄阳 但樱花是陌生的东西,骄阳也从未...
    丿肆悦阅读 153评论 0 1