关于班次运营商

Ull*_*las 2 java

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第一种方法进入无限循环,其中第二种方法迭代31次变为0;为什么java在转移时只考虑右操作数的低位5位?

use*_*421 5

因为这是Java语言规范中指定的内容:"如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离."

很多硬件都是这样工作的.