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

为什么我=我+我给我0?

相旭
2023-03-14
问题内容

我有一个简单的程序:

public class Mathz {
    static int i = 1;
    public static void main(String[] args) {    
        while (true){
            i = i + i;
            System.out.println(i);
        }
    }
}

当我运行该程序时,我看到的只是0用于i输出。我原本希望我们会遇到第一轮i = 1 + 1,然后是i = 2 + 2,然后是i = 4 + 4etc。

这是由于这样的事实,一旦我们尝试i在左侧重新声明,其值就会重置为0

如果有人可以指出我的详细情况,那将很棒。

更改intlong,似乎正在按预期方式打印数字。我对它达到最大32位值的速度感到惊讶!


问题答案:

该问题是由于整数溢出引起的。

在32位二进制补码算法中:

i确实确实开始具有2的幂,但是一旦您达到2 30,就会开始出现溢出行为:

2 30 + 2 30 = -2 31

-2 31 + -2 31 = 0

…在int算术上,因为它本质上是算术mod 2 ^ 32。



 类似资料:
  • 问题内容: 我有这个web.xml 突出显示,IDE给出的错误是:“发现无效的内容,从element开始… 我还需要做什么? 问题答案: 使用以下表示法: 但我建议阅读此链接。本教程将使您了解在JSP 2.0的情况下如何避免在web.xml中声明标签库。

  • 抱歉,如果不允许这样做。这是我第一次问问题。无论如何,我应该实现一个程序,根据文本读取等级。 “实施一个程序,根据以下内容计算理解某些文本所需的大致年级水平。文本:恭喜!今天是你的一天。你要去很棒的地方!你走了,走了!3 年级 在完成代码之后。每次我编译它时,它都会给我一个异常,即我除以零。几乎就像在我要求用户输入文本后,它根本不被读取,字母计数保持在零。我不知道如何绕过它。下面是我导入java.

  • 问题内容: 以下语句: 因错误而失败: 为什么在这里需要演员表? 我发现了几篇文章,解释了为什么您不能进行反向操作(将T分配给a),但这是显而易见的(可以理解)。 注意:我在Eclipse Luna下对此进行编码,所以我不知道这是Luna Quirk还是泛型中确实不了解的东西。 问题答案: 协方差vs协方差vs不变性 是 不变的 。 结果是, 是 不是一个亚型 的 在Java中,变量可以保存 相同

  • 问题内容: 为什么经常被称为 代替 ? W3,MDN和MSDN都声明它是可选的。此外,ActiveX控件似乎不需要参数: 这种做法至少可以追溯到2005年的Google Maps中 ,但被缩小了,没有任何解释: 问题答案: 如果您看一下XMLHttpRequest的旧规范,似乎W3C似乎并不需要在某一点上将该参数设为可选,这可能导致人们提供了一个明确的null值,以防万一。 (搜索“应支持发送”)

  • 问题内容: 每次尝试编译时,它表明变量可能未初始化。我认为可能是问题所在。告诉我如何在中运行2条语句。 问题答案: d1不在else块中且仅在if或else if块中初始化,因此,如果if()和elseif()块中的所有语句均为false,则控制器进入else块,而d1仍然不是初始化。因此,当您尝试在system.out.println()中访问它时,编译器正确地抛出该错误。您可能想在一开始将值初

  • 问题内容: 这是我有史以来的第一个servlet。这是代码。 我使用此命令对其进行了编译, 然后将文件放入WEB-INF文件夹中的classes文件夹中。 这是我的web.xml Tomcat7一直给我一个404的说法 文件树: 我在这里做错了什么? 问题答案: 您应该将servlet类放在包中。无包servlet是否起作用取决于旧版Tomcat和JVM版本的特定组合。如果您在书/教程中看到此示例