【问题标题】:unsigned right Shift '>>>' Operator in Java [duplicate]Java中的无符号右移'>>>'运算符[重复]
【发布时间】:2013-01-08 04:51:36
【问题描述】:

可能重复:
Why is (-1 >>> 32) = -1?

无符号右移运算符在最左边插入一个 0。所以当我这样做时

System.out.println(Integer.toBinaryString(-1>>>30))

输出

11

因此,它在最左边插入 0。

System.out.println(Integer.toBinaryString(-1>>>32))

输出

11111111111111111111111111111111

不应该是0吗?

【问题讨论】:

  • 比较试试-1 >>> -1-1 << -1

标签: java bit-shift


【解决方案1】:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19

如果左侧操作数的提升类型是 int,则只有右侧操作数的五个最低位用作移位距离。就好像右手操作数受到按位逻辑与运算符 & (§15.22.1) 的影响,掩码值为 0x1f (0b11111)。因此,实际使用的移动距离总是在 0 到 31 的范围内,包括 0 到 31。

-1 >>> 32 等价于-1 >>> 0-1 >>> 33 等价于-1 >>> 1 而且,特别令人困惑的是,-1 >>> -1 等同于 -1 >>> 31

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2012-07-10
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多