繁体   English   中英

java的最大值为int

[英]java maximum value of int

从java文档中, int has a minimum value of -2,147,483,648 and a maximum value of 2,147,483,647 (inclusive)

我有一个Test.java类。

public class Test
{
    public static void main(String[] args)
    {
        int i=2147483647; //max positive value an int can store
        for(;;)
        {
            System.out.println(++i);
        }
    }
}

按我的知识++i应该增加的价值i 1和抛出异常,因为2147483648是不是在允许int

但是当我在程序之上运行它会运行(因为无限循环),而不是将值递增到2147483648 ,分配给i的值是-2147483648 ,并且值每次递减1

示例运行(修改类后)

public static void main(String[] args)
{
    int i=2147483647;
    for(;;)
    {
        System.out.println(++i);
        System.out.println(++i);
        System.out.println(++i);
        System.out.println(++i);
        System.out.println(++i);
        break;
    }
}

输出:

-2147483648
-2147483647
-2147483646
-2147483645
-2147483644

答案/提示将不胜感激。

根据我的知识++我应该将i的值递增1并抛出异常,因为int中不允许使用2147483648。

你的理解是不正确的。 整数算术在Java中以静默方式溢出。

JLS第15.18.2节

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

您遇到了一种称为整数溢出的情况: http//en.wikipedia.org/wiki/Integer_overflow

这称为整数溢出 对整数值的算术运算永远不会抛出异常,这不仅仅是Java。

最小值和最大值仅用于确定int是否足以进行计算。

在java下溢和溢出的数值都关闭(沉默)。 在下溢和溢出事件期间,Java会持续递增/递减数值的范围。

第4.2.2节。 整数运算

整数运算符不以任何方式指示上溢或下溢。

我不会给出确切的答案,但请考虑一下:

  • 如何用Java表示整数(以什么样的binair数表示)?
  • 如果你将最高可能的binair数加1,会发生什么?

暂无
暂无

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

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