当前位置: 首页 > 面试题库 >

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

贾建茗
2023-03-14
问题内容

我试图检查不同的输入并在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_VALUEby
+1会给您Integer.MIN_VALUE…)



 类似资料:
  • 问题内容: 在Python控制台中: 给我: 为什么?有人可以用二进制给我解释这个特殊情况吗? 问题答案: 是。 是: 并且是: 这是在两个补1 1翻转所有位,将1加到结果数上,并将结果解释为幅度的 二进制表示形式 ,并添加一个负号(因为数字以1开头): 它是2,但是由于MSB是1 ,所以符号是负数。 值得一提: 想一想,您会发现它本质上是数字-它有两个值和,它们只是整数1和0的“自定义”版本,它

  • 我有一个ColdFusion事件网关,有时会在以下行产生错误(其中Local.cur线程是数字1-5): 错误是: 消息:超时值为负。类型:java。lang.IllegalArgumentException 这是StackTrace: Java语言lang.IllegalArgumentException:java的超时值为负。lang.Object。在coldfusion上等待(本机方法)。运

  • 问题内容: 我编写了一个Java程序来访问MySQL innodb数据库。 每当INSERT IGNORE语句遇到重复的条目时,“自动增量”主键就会递增。 这是预期的行为吗?我认为IGNORE不应该发生这种情况。这意味着,IGNORE实际上会产生写入新主键值的额外开销。 下表如下: 谢谢! 问题答案: 从MySQL 5.1.22开始,这就是默认行为。 如果您想避免自动增量列中出现空白,可以将配置变

  • 我有一个我将像这样填充它 在这种情况下,如果返回类似的内容,那么最终结果是一个空的?这是为什么?我以为会捕获所有转义字符。

  • 问题内容: 我在搜索我的网站上具有自动完成/提前输入功能。我看到他们有时是一个例外。我们正在使用代理服务器。 引起原因:java.net.ConnectException:连接被拒绝 这是我的编码方式 谁能告诉我为什么我只在某个时候得到这个例外?是否可能是由于从Android应用程序发出搜索请求而导致此异常,因为我们的网站不支持从android应用程序发出请求 问题答案: 当您尝试打开与IP地址/

  • 问题内容: 好吧,我试图理解并阅读可能导致它的原因,但我却无法理解: 我的代码中有这个地方: 事实是,当它尝试调用某些方法时,它将引发而不是其他预期的异常(特别是)抛出 。我实际上知道调用了什么方法,所以我直接转到该方法代码,并为应该抛出的行添加了一个块 ,它实际上按预期抛出。然而,当它上升时,以某种方式更改了上面的代码并没有 按预期进行。 是什么原因导致这种行为的?我该如何检查? 问题答案: 通