为什么" num"在某个时候变成0?
int num = 16;
for (int i = 1; i < 1000; i++)
{
Console.WriteLine(num *= i);
}
答案 0 :(得分:4)
在您的第31次迭代中,由于您说您已经理解的溢出,num
将为-1073741824
。
在下一个(第32次)迭代中,您将num
乘以32
,b100000
为二进制。此乘法与向左移动值5位相同。
-1073741824
为0xC0000000
,如果您向左移5位,则 32位值最终为0x00000000
=&gt;零。
答案 1 :(得分:2)
每次i
是2的倍数时,将n
乘以它会使n
在结尾处有更多0
位。最终,它足以填充变量,使其为0。
答案 2 :(得分:2)
每次乘以偶数时,都会在数字的右侧添加一个或多个二进制零,但永远不会删除一个。最终你达到了所有数字为零的点。
这是你得到的序列,请注意右侧只能获得更长的零数字序列:
matplotlib.pyplot
答案 3 :(得分:0)
因为当乘法结果太大时,它会溢出int
的容量。