C#For Loop Confusion

时间:2017-02-09 17:51:32

标签: c#

为什么" num"在某个时候变成0?

int num = 16;
for (int i = 1; i < 1000; i++)
{
    Console.WriteLine(num *= i);
}

4 个答案:

答案 0 :(得分:4)

在您的第31次迭代中,由于您说您已经理解的溢出,num将为-1073741824

在下一个(第32次)迭代中,您将num乘以32b100000为二进制。此乘法与向左移动值5位相同。

-10737418240xC0000000,如果您向左移5位,则 32位值最终为0x00000000 =&gt;零。

答案 1 :(得分:2)

每次i是2的倍数时,将n乘以它会使n在结尾处有更多0位。最终,它足以填充变量,使其为0。

答案 2 :(得分:2)

每次乘以偶数时,都会在数字的右侧添加一个或多个二进制零,但永远不会删除一个。最终你达到了所有数字为零的点。

这是你得到的序列,请注意右侧只能获得更长的零数字序列:

matplotlib.pyplot

答案 3 :(得分:0)

因为当乘法结果太大时,它会溢出int的容量。