#include<iostream>  // 包含输入输出流库头文件

using namespace std;  // 使用标准命名空间

int main()  // 主函数
{
    int a = 1234;  // 定义整型变量a并赋值为1234

    cout.setf(ios::showbase | ios::uppercase);  // 设置cout的输出格式,显示数值的基数前缀和使用大写字母表示十六进制数的字母A-F

    cout << oct << a << " " << hex << a << endl;  // 使用oct操纵符以八进制形式输出a,然后使用hex操纵符以十六进制形式输出a,最后输出换行符endl

    return 0;  // 返回0表示程序成功执行
}

当我们使用cout对象输出整数时,有时我们希望在输出中显示一些格式化的信息,比如八进制或十六进制的前缀,以及使用大写字母表示十六进制中的字母A到F。在C++中,我们可以使用操纵符(manipulators)来控制输出的格式。

cout.setf(ios::showbase | ios::uppercase); 这一行代码使用了成员函数setf()来设置输出流cout的标志位。让我们详细解释其中的两个标志位:

  1. ios::showbase: 这个标志位用于控制整数的基数(进制)是否显示前缀。例如,对于十六进制数,设置了这个标志位后,会在输出中显示 "0x" 前缀;对于八进制数,会显示 "0" 前缀。
  2. ios::uppercase: 这个标志位用于控制十六进制数的字母是否使用大写形式。设置了这个标志位后,十六进制数中的字母 A 到 F 会以大写形式显示。

所以,cout.setf(ios::showbase | ios::uppercase); 这一行代码的作用是设置cout对象的标志位,使得在输出整数时,显示数值的基数前缀(如 "0x" 或 "0"),并且使用大写字母表示十六进制中的字母A到F。