下面程序输出是什么
int main() { bool first=true; int sum=0; int value; unsigned short i=0xFFFF; for (;i>=0;--i) { if (first) { value=65536; sum+=value%3; first=false; } else{ sum+=--value%3; if (value<=0) { cout<<sum<<","<<i; break; } } } return 0; }
int main() { bool first=true; int sum=0; int value; unsigned short i=0xFFFF; for (;i>=0;--i) { if (first) { value=65536; sum+=value%3; first=false; } else{ sum+=--value%3; if (value<=0) { cout<<sum<<","<<i; break; } } } return 0; }
1,65535
65535,65535
65535,65536
65535,1
65536,65535
在循环中,变量i的类型是无符号短整型,初始值是 0xFFFF。因此,在每次迭代中,它都会减去 1,直到为 0,才会退出循环。因为i是无符号类型,所以它永远不会小于 0。由于循环的迭代次数是有限的,即 2^16 次,因此循环将在最后一次迭代中退出。
循环变量value的初始值是 65536,每次迭代时,它会减去 1,并累加到变量sum中。在第一次迭代中,程序会将65536累加到sum中,然后将value减 1 变成 65535,这个过程反复执行,直到循环结束。
当i变成 0 时,程序输出sum和i的值。此时sum的值为 65536,i的值为 65535。因为sum的初值就是 65536,而循环内部每次都将value的值累加到sum中,所以在循环结束时,sum的值就是 65536。而i的值最后减去 1 变成 0,导致循环退出。