首页 > 解决方案 > AndroidStudio/Flutter 中奇怪的循环数

问题描述

我刚刚在 AndroidStudio 中玩过,遇到了这个号码:8198552921648689606

我的代码如下所示:

int x = 1;

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

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

它只发生在数字 10 或 100 或 1000(或我假设的任何 10 因子)作为一个因子,它也发生在 Java 中。

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

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

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

标签: javaandroidfor-loopintegerbit

解决方案


我不太了解您要做什么,但这是发生的事情:

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

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

其次,如果你这样做,你应该能够看到这种情况:

一世 X (在“x++”之后) 之后 ( x *= 10)
1 1 2 20
2 20 21 210
3 210 211 2110
... ... ... ...

当i = 63时,您的X将为=2111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111朗得库来证级岁(2.1*10^127)。请注意,此数字远大于Java 的 int 限制2147483647


推荐阅读