繁体   English   中英

为什么递增Java int最终会导致负数?

[英]Why does incrementing a Java int eventually result in a negative number?

我试图检查不同的输入并在java中创建无限循环,我发现一旦int增加超过最大限制,它将转为负-2147482958 我只是在无限循环中增加int ...

码:

public static void infiniteLoop(){
        for(int i=0;i>-1;i++){
            i = i + 1000;
            System.out.println(i);
        }
    }

打印出来的最后一个值是,

2147483337
-2147482958

现在,为什么会出现负面影响?

它为什么会消极?

因为当int计算溢出时,这就是Java中指定的内容。

JLS 15.18.2

“如果整数加法溢出,则结果是数学和的低阶位,如某些足够大的二进制补码格式所示。如果发生溢出,那么结果的符号与符号的符号不同两个操作数值的数学和。“


(这并没有明确地说溢出总是给出一个负数。并且它并不总是。但是如果你应用规则,它确实解释了为什么递增Integer.MAX_VALUE乘以+1给你Integer.MIN_VALUE ...)

根据文件:

int数据类型是32位带符号的二进制补码整数。 它的最小值为-2,147,483,648(0x80000000),最大值为2,147,483,647(0x7FFFFFFF)(含)

因此,当您将一个加到整数的最大值时:

0x7FFFFFFF + 0x00000001 = 0x80000000(-2,147,483,648)

因为当int的值达到Integer.MAX_VALUE时 ,递增它会导致溢出 ,因此会回绕到Integer.MIN_VALUE

要使用更大的整数,请使用long而不是64位

因为int范围从-2,147,483,648到2,147,483,647。 因此,一旦达到上限,它就会溢出并从负面开始。

查看文档

int数据类型是32位带符号的二进制补码整数。 它的最小值为-2,147,483,648,最大值为2,147,483,647(含)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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