java - 关于轮类运算符(operator)

标签 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);
        }
    }
}

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

最佳答案

因为这就是 Java Language Specification 中指定的内容: “如果左侧操作数的提升类型为 int,则仅使用右侧操作数的最低 5 位作为移位距离。”

很多硬件也是这样工作的。

关于java - 关于轮类运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094746/

相关文章:

java - Spring @TestPropertySource 类路径与文件

java - 取消大调小调格式

java - List.indexOf() 的 lombok EqualsAndHashCode

java - hibernate 4.2 + 轴 1.4 + Apache Tomcat 7 + maven

java - 就地快速排序问题

java - 无法通过限定符注入(inject)

java - 无法正确存储 sqlite

java - IntentService 中的 RegisterReceiver,跟踪 SmsManager

java - 编译 java 文件时遇到问题(ANT 和 XML 相关)

java - 如何从另一个类中的另一个公共(public)整数调用公共(public)整数?