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

为何std::cout输出八进制数时开头不带前导0?

问题解答

首先要明确两个不同的规则:

  • 代码中的八进制字面量需要加前导0,这是C++语法对字面量的规定(比如写int i = 010;时,010才是八进制的8)
  • 输出流的八进制转换:std::oct操纵符的作用仅仅是让输出流把整数的值转换成八进制数字串输出,并不会自动添加前导0

你的代码里变量i是十进制的8,通过std::oct输出时,会被转换成八进制的数字表示10,这完全符合C++标准的行为。如果想要输出带前导0的格式,需要手动处理,比如两种常见方式:

方式1:手动拼接前导0

#include <iostream>

int main()
{
    int i = 8;
    std::cout << "0" << std::oct << i;
}

方式2:用格式化工具实现固定宽度的前导0

需要包含<iomanip>头文件来使用setfill和setw:

#include <iostream>
#include <iomanip>

int main()
{
    int i = 8;
    // 设置填充字符为0,输出宽度为3,不足的位置用0填充
    std::cout << std::setfill('0') << std::setw(3) << std::oct << i;
}

两种方式都会输出010,第二种更适合需要固定位数的场景。

内容的提问来源于stack exchange,提问作者João Ferrão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:39:27