可能重复:
为什么(-1 >>> 32)= -1?
无符号右移运算符在最左边插入0.所以,当我这样做
System.out.println(Integer.toBinaryString(-1>>>30))
Run Code Online (Sandbox Code Playgroud)
11
Run Code Online (Sandbox Code Playgroud)
因此,它在最左边的位中插入0.
System.out.println(Integer.toBinaryString(-1>>>32))
Run Code Online (Sandbox Code Playgroud)
11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
不应该是0吗?
Evg*_*eev 49
见http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x1f(0b11111)的影响.因此,实际使用的移位距离始终在0到31的范围内,包括0和31.
这-1 >>> 32 相当于-1 >>> 0并且-1 >>> 33 等同于-1 >>> 1
,尤其令人困惑,-1 >>> -1 相当于-1 >>> 31
| 归档时间: |
|
| 查看次数: |
45303 次 |
| 最近记录: |