我做了一个周期计算外来物种增长的人口。这是循环:
int mind = 96;
int aliens = 1;
for (int i=0; i <= mind; i++)
{
aliens = aliens * 2;
}
cout << aliens;
奇怪的是,cout
正在返回0
,这没有任何意义,它应该返回一个非常高的值。循环是否编码错误?
答案 0 :(得分:2)
问题很简单。你有一个int
(很可能是32位有符号整数)。您正在进行的操作(每个周期x2)可以表示为移位算术左。
当心2的力量!做1&lt;&lt; 31位32位有符号整数将有效地返回0(溢出后)。
让我们看看你的循环是怎么回事。
0 2
1 4
2 8
3 16
4 32
5 64
6 128
7 256
8 512
9 1024
10 2048
11 4096
12 8192
13 16384
14 32768
15 65536
16 131072
17 262144
18 524288
19 1048576
20 2097152
21 4194304
22 8388608
23 16777216
24 33554432
25 67108864
26 134217728
27 268435456
28 536870912
29 1073741824
30 -2147483648 // A.K.A. overflow
31 0
此时我不认为我需要告诉你0 x 2 = 0
重点是:使用至少mind + 1
位长的双变量或整数变量