[英]Regarding shift operators
public class Shift{
public static void shift1(){
int i = 0;
while(-1 << i != 0){
i++
}
}
public void shift2(){
for(int i=-1;i!=0;i<<=1){
System.out.println(i);
}
}
}
第一种方法进入无限循环,在无限循环中第二次迭代31次变为0;为什么Java在移位时只考虑右操作数的低5位?
因为这是Java语言规范中指定的内容:“如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离。”
许多硬件也可以这样工作。
Java不会移动32或更多,因为它对int是一个相当无用的操作,并且仅仅因为它是如何指定工作的。
“最低5位”无关紧要。
-1表示为32“1”位: 11111111111111111111111111111111
每个<< 1
操作都会咀嚼其中一个位,直到i
为零 - 这就是控制迭代次数的因素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.