我在Java中有移位运算符的问题.我使用了以下代码,并且无法理解该程序如何生成此输出.所以请指导我该程序如何生成此输出.
public class Operator {
public static void main(String[] args) {
// TODO Auto-generated method stub
int s = 8;
s = s >>-63;
System.out.println("value of i=" + s);
}
}
Run Code Online (Sandbox Code Playgroud)
输出: i = 4的值
Jon*_*eet 17
从JLS,第15.19节(班次运营商):
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x1f(0b11111)的影响.因此,实际使用的移位距离始终在0到31的范围内,包括0和31.
现在-63 & 0x1f == 1,所以这实际上是向右移1,因此4的答案.
| 归档时间: |
|
| 查看次数: |
6269 次 |
| 最近记录: |