繁体   English   中英

关于班次运营商

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM