可能的重复:
为什么(-1 >>> 32) = -1? https://stackoverflow.com/questions/4813909/why-is-1-32-1
无符号右移运算符在最左边插入 0。所以当我这样做时
System.out.println(Integer.toBinaryString(-1>>>30))
output
11
因此,它在最左边的位插入 0。
System.out.println(Integer.toBinaryString(-1>>>32))
output
11111111111111111111111111111111
不应该是0吗?
See http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19 http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19
如果左侧操作数的提升类型为 int,则仅使用右侧操作数的最低 5 位作为移位距离。就好像右侧操作数受到掩码值为 0x1f (0b11111) 的按位逻辑 AND 运算符 & (§15.22.1) 的影响。因此,实际使用的移位距离始终在 0 到 31 的范围内(包含 0 和 31)。
that is -1 >>> 32
相当于-1 >>> 0
and -1 >>> 33
相当于-1 >>> 1
而且,特别令人困惑的是,-1 >>> -1
相当于-1 >>> 31
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)