【问题标题】:Weird for loop number in AndroidStudio/FlutterAndroid Studio/Flutter 中奇怪的循环数
【发布时间】:2021-07-17 01:42:58
【问题描述】:

我刚刚在 AndroidStudio 中玩了一下,发现了这个数字: 8198552921648689606

我的代码如下所示:

int x = 1;

for (int i = 0; i<64; i++)
{
x++;
x *= 10;
}
print(x);

由于某种原因,它卡在了这个奇怪的数字上。 我预计它会在整数线上跳来跳去,但对于 64 以上的所有数字,它都保持这样。

它只发生在数字 10 或 100 或 1000(或任何我认为的十倍数)作为一个因素时,它也发生在 Java 中。

卡住的数字根据位系统的类型和使用的数字而变化,但它一直卡住。

关于整数行似乎是一个奇怪的巧合,但我真的很想知道发生了什么。

更新: 似乎偶数因素会发生,但奇数因素不会。尽管如此,我仍然无法理解。

【问题讨论】:

    标签: java android for-loop integer bit


    【解决方案1】:

    我不太明白你想要做什么,但这是发生的事情:

    首先,如果您想遵循“x”变量中值的“转换”,您应该在循环中包含print 语句:

    for (int i = 0; i<64; i++)
    {
    x++;
    x *= 10;
    print(x); // <- inserted in here
    }
    print(x);
    

    其次,如果你这样做,你应该能够看到那个场景:

    i x (after "x++") after ( x *= 10)
    1 1 2 20
    2 20 21 210
    3 210 211 2110
    ... ... ... ...

    当I = 63的x是= 211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110(2.1 * 10 ^ 127)。请注意,这个数字远大于Java's int limit 2147483647

    【讨论】:

    • 我知道这对于 int 限制来说太大了,但是尝试使用数字 15 作为因素的相同代码,它不会卡在同一个数字上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2017-08-20
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多