You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中使用前导零初始化整数出现意外结果的原因探究

关于C++中带前导零整数的解析问题

咱们逐个解答你的疑问:

1. C++中带前导零的整数会被当作八进制存储吗?

当然会!这是C++的标准规定:只要整数字面量以0开头(不是0x/0X这种十六进制前缀),编译器就会把它解析为八进制整数。

你代码里的int num = 0031;,0031是八进制数,转成十进制就是3*8 + 1 = 25,所以打印出来是25,这完全是符合规则的正常表现,不是程序出错啦。

2. 为什么用cin输入0031能得到正确的31?

这是因为cin默认采用十进制解析规则,它不会把输入内容里的前导零当成八进制的标识。

当你输入0031时,cin会自动忽略前面的无效前导零,只把后面的31按照十进制来转换存储,所以最终得到的就是31。

要是你想让cin把带前导零的输入当作八进制解析,也可以手动设置输入流的基数,比如改成这样:

cin >> oct >> num;

这时候输入0031,就会被解析成八进制的25啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:37:26