#include <iostream>
using namespace std;
int main()
{
unsigned long maximum = 0;
unsigned long values[] = {60000, 50, 20, 40, 0};
for(short value : values){
cout << "Current value:" << value << "\n";
if(value > maximum)
maximum = value;
}
cout << "Maximum value is: " << maximum;
cout << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Current value:-5536
Current value:50
Current value:20
Current value:40
Current value:0
Maximum value is: 18446744073709546080
Run Code Online (Sandbox Code Playgroud)
我知道我不应该使用short内for循环,最好使用auto,但我只是想知道,这里发生了什么?
g++ 9.3.0我相信我正在使用 Ubuntu 。
问题在于short value何时60000到达元素。
这太大了,无法放入short您的平台上,因此您short会溢出,并带有实现定义的结果。
在您的情况下似乎发生的是,60000环绕为负数-5536,然后(以明确定义的方式)转换为 an unsigned long,在您的情况下为 2 64 - 5536:这等于您的程序显示的最大值。
一种解决方法是使用惯用语
for(auto&& value: values){
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |