You need to enable JavaScript to run this app. C++代码运行输出结果与预期不符,更换long类型仍无效问题求助
优惠活动
大模型
产品
解决方案
定价
更多

C++代码运行输出结果与预期不符,更换long类型仍无效问题求助

问题原因
  • 32位有符号整型溢出:你预期得到的结果4946484651数值约为49亿,远大于32位有符号int的最大值2147483647(约21亿),存放在int类型的变量p中会发生溢出。C++中signed整型溢出属于未定义行为,你得到的输出651517355就是溢出后高位被截断,仅保留低32位的计算结果。
  • Windows平台long类型长度限制:你将p修改为长整型后依旧报错,是因为Windows平台下MSVC编译器的long类型即使在64位运行环境中,也依旧采用4字节32位长度,和普通int长度一致,还是无法容纳49亿的数值,因此溢出问题没有得到解决。
解决方法

选择长度足够的64位整型存储p即可,将p的类型声明为long long即可:C++标准规定long long类型长度至少为64位,所有主流编译器都遵守该规则,64位有符号整型的最大值为9223372036854775807,完全可以容纳你的计算结果。

修改后可正常运行的代码如下:

#include <iostream>

using namespace std;

int main()
{
    int c[]={49,46,48,46,51};
    long long p=0; // 替换原有int类型声明
    for(int i=0;i<5;i++)
         p =p*100+c[i];

    cout << "Hello World! p=" <<p<< endl;
    return 0;
}

运行后即可得到你预期的输出:Hello World! p=4946484651

内容的提问来源于stack exchange,提问作者Jilong Yin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 07:00:00