【问题标题】:Why -2>>>1 equals 2147483647 in Java为什么 -2>>>1 在 Java 中等于 2147483647
【发布时间】:2016-05-14 20:47:58
【问题描述】:

-2的补码是100000...01

-2 的补码是 1000000...10

-2 >>> 1 

根据>>>定义左移0

应该是01000......1,为什么变成0111111..11

【问题讨论】:

  • >>> 是无符号右移运算符,不会像 >> 那样查看符号位 .. related question

标签: java operator-keyword twos-complement ones-complement


【解决方案1】:

为了产生2 的二进制补码表示(即-2 的表示),您从2 的表示开始,翻转其所有位,并将1 添加到结果中:

00000000000000000000000000000010 -- This is 2
11111111111111111111111111111101 -- This the inverse of 2
11111111111111111111111111111110 -- This is the inverse of 2, plus 1

-2 的二进制表示是11111111111111111111111111111110 (demo)。

在没有符号扩展的情况下将它向右移动一个产生

01111111111111111111111111111111

这正是你得到的结果。

【讨论】:

    猜你喜欢
    • 2022-04-12
    • 2014-07-04
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2013-01-05
    相关资源
    最近更新 更多