Java 位移位问题

Java 位移位问题,java,Java,给定以下代码: public class Something { public static void main(String[] args) { int num = 1; num <<= 32; System.out.println(num); num = 1; for (int i = 0 ; i < 32; i++) num <<= 1; System.out.println(num); }

给定以下代码:

public class Something {
public static void main(String[] args) {
    int num = 1;

    num <<= 32;
    System.out.println(num); 

    num = 1;
    for (int i = 0 ; i < 32; i++)
        num <<= 1;
    System.out.println(num);
}
}
num的第一个输出 有人能解释一下吗

当然。基本上,int上的移位操作会屏蔽右操作数,以获得[0,31]范围内的值。长时间上的移位操作将其屏蔽,以获得范围[0,63]内的值

因此:

相当于:

num <<= 0;
发件人:

如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受位逻辑AND运算符&§15.22.1,掩码值为0x1f 0b11111。因此,实际使用的移动距离始终在0到31之间(包括0到31)

有人能解释一下吗

当然。基本上,int上的移位操作会屏蔽右操作数,以获得[0,31]范围内的值。长时间上的移位操作将其屏蔽,以获得范围[0,63]内的值

因此:

相当于:

num <<= 0;
发件人:

如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受位逻辑AND运算符&§15.22.1,掩码值为0x1f 0b11111。因此,实际使用的移动距离始终在0到31之间(包括0到31)


对于int上的位移位运算符,只有。因此对于int上的位移位运算符,只有。有关更多详细信息,请参阅。有关更多详细信息,请参阅。