[原创](Modern C++)现代C++的关键性概念: 流格式化

常用网名: 猪头三

出生日期: 1981.XX.XX

企鹅交流: 643439947

个人网站: 80x86汇编小站

编程生涯: 2001年~至今[共24年]

职业生涯: 22年

开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python

开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder

技能种类: 逆向 驱动 磁盘 文件

研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全

项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]

在C++的输入输出操作中, 流(stream)是一个重要的概念. 标准库提供了std::cout(用于标准输出)和std::cin(用于标准输入), 它们是基于流的输入输出方式. 对于格式化输出, C++提供了一系列操纵符(Manipulator), 可以用来控制数据的显示格式, 如进制转换、对齐、精度控制等. 现代C++引入了更多的功能, 如 std::bitset 处理二进制数, 以及更灵活的浮点数格式化方法.

[代码示例]

下面是一个演示如何使用现代C++进行流格式化的代码片段:

cpp 复制代码
#include <iostream>
#include <iomanip>
#include <bitset>

int main()
{
    // 10进制, 8进制, 16进制输出
    std::wcout << std::dec << 10 << L" " << std::oct << 10 << L" " << std::hex << 10 << std::endl;

    // 2进制表示
    std::bitset<32> binary(10);
    std::wcout << binary << std::endl;

    // 浮点格式化 方法1(使用 std::fixed 和 std::setprecision)
    double double_pi{ 3.14159265358979323846 };
    std::wcout << std::fixed << std::setprecision(4) << double_pi << std::endl;

    // 浮点格式化 方法2(使用 precision 方法)
    std::wcout.precision(3);
    std::wcout << double_pi << std::endl;

    return 0;
}

1> 整数进制格式化

std::dec:将数值按十进制格式化.

std::oct:将数值按八进制格式化.

std::hex:将数值按十六进制格式化.

2> 二进制格式化

std::bitset<32> binary(10); 创建了一个大小为32位的二进制表示,值为10. 直接std::wcout << binary; 会输出10的二进制表示 00000000000000000000000000001010.

3> 浮点数格式化

std::fixed:指定浮点数输出使用定点格式,而非科学计数法.

std::setprecision(n):控制小数点后的精度.

std::wcout.precision(3); 直接修改流的默认精度设置.

[总结]

本篇文章介绍了C++流格式化的基础用法, 包括整数的进制转换、二进制格式化, 以及浮点数的格式化控制. C++ 提供了丰富的流操纵符, 可以更加灵活地控制输出格式, 从而提高代码的可读性和可维护性. 合理使用这些格式化方式, 可以使终端输出更加直观和美观, 提升用户体验.

相关推荐
li16709027023 分钟前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
zh_xuan1 小时前
libcurl调用https接口
c++·libcurl
就叫飞六吧1 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
蜡笔小马1 小时前
1.c++设计模式-工厂模式
c++
汉克老师2 小时前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
winner88812 小时前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI进化营-智能译站2 小时前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
winner88812 小时前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋3 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke