C++进制转换工具 数值计算与格式化输出

C++通过iostream和iomanip支持十进制、八进制、十六进制的格式化输出,结合std::bitset实现二进制转换,使用to_base函数可扩展至任意进制,辅以setfill、setw等控制输出格式,灵活处理数值转换与显示。

在C++中实现进制转换和数值的格式化输出,是编程中常见的需求,尤其在嵌入式开发、算法题或数据处理场景中非常实用。C++标准库提供了多种方式来完成十进制与其他进制(如二进制、八进制、十六进制)之间的转换,并支持灵活的输出格式控制。

支持的进制与基本转换方法

C++原生支持以下几种进制的输入输出:

  • 十进制(decimal):默认格式
  • 八进制(octal):以std::oct设置
  • 十六进制(hexadecimal):以std::hex设置

对于二进制,标准库不直接支持输入输出,但可通过std::bitset或手动实现转换。

示例:使用iostream进行格式化输出

#include 
#include 

int main() {
    int num = 255;
    std::cout << "Decimal: " << std::dec << num << '\n';
    std::cout << "Octal: " << std::oct << num << '\n';
    std::cout << "Hex: " << std::hex << std::uppercase << num << '\n';
    return 0;
}

输出:

Decimal: 255
Octal: 377
Hex: FF

二进制转换与输出

C++标准库未提供直接输出二进制的流操作符,但可借助std::bitset实现:

#include 
#include 

int main() {
    int num = 255;
    std::cout << "Binary: " << std::bitset(num) << '\n';
    return 0;
}

输出:

Binary: 11111111

可根据需要调整bitset的位宽,如bitset表示16位二进制。

十进制转任意进制(通用函数)

若需将十进制数转换为任意进制(如2~36),可编写通用函数:

#include 
#include 
#include 

std::string to_base(int num, int base) {
    if (num == 0) return "0";
    const std::string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    std::string result;
    bool is_negative = num  0) {
        result += digits[num % base];
        num /= base;
    }
    if (is_negative) result += '-';
    std::reverse(result.begin(), result.end());
    return result;
}

int main() {
    std::cout << "255 in binary: " << to_base(255, 2) << '\n';
    std::cout << "255 in hex: " << to_base(255, 16) << '\n';
    std::cout << "-42 in base 36: " << to_base(-42, 36) << '\n';
    return 0;
}

输出:

255 in binary: 11111111
255 in hex: FF
-42 in base 36: -16

格式化输出控制

使用iomanip可进一步控制输出格式,如填充、宽度、前缀等:

#include 
#include 

int main() {
    int num = 255;
    std::cout << std::setfill('0') << std::setw(8) << std::hex << num << '\n';
    // 输出:000000ff(8位宽,前导0填充)
    return 0;
}

常用格式控制符:

  • std::setfill(c):设置填充字符
  • std::setw(n):设置输出宽度
  • std::uppercase:十六进制字母大写
  • std::showbase:显示进制前缀(如0x)

基本上就这些。C++的进制转换结合流操作和辅助类,能高效完成各类格式化需求,灵活且易于扩展。实际使用中注意负数处理和边界情况即可。不复杂但容易忽略细节。

以上就是C++进制转换工具 数值计算与格式化输出的详细内容,更多请关注骃骐网【www.myinqi.com】。

相关推荐:

如何在 Pandas DataFrame 中按行交换两列中数值与非数值的值

本文介绍一种简洁高效的方法,利用 NumPy 对 DataFrame 中指定两列进行逐行排序并反向切片,自动将每行中数字型值“归位”到目标列(如 age),字符串值则移至另一列(如 last_name),无需手动判断类型或循环。 本文介绍一种简洁高效的方法,利用 numpy 对 dataframe 中指定两列进行逐行排序并反向切片,自动将每行中数字型值“归位”到目标列(如 `age`),字符串值则...

为什么Python 3.5以前的版本不支持f-string_升级解释器或使用format函数格式化

f-string是Python 3.6+引入的字符串格式化语法,3.5及更早版本不支持,会直接报SyntaxError;需通过python3 --version或sys.version确认解释器版本,.format()和%格式化是兼容旧版本的替代方案。 f-string 是 Python 3.6 才正式加入的语法,3.5 及更早版本根本无法解析 f"..." 这种写法,会直接报 SyntaxErr...

Python如何对复杂JSON进行扁平化处理_编写递归转换工具函数

json_normalize默认只展开一层且容忍度低,遇None、非字典项或混合结构易报错漏字段;需用递归函数区分结构展开与列表行展开,并显式保留空值、控制键名唯一性、避免栈溢出。 遇到嵌套字典列表时,json_normalize 为什么总报错或漏字段? 因为 pandas.json_normalize 默认只展开一层嵌套,且对混合结构(如字典里夹列表、列表里夹字典、空值混杂)容忍度低。它会跳过 ...

如何在Python中对数值列进行分箱离散化_利用cut与qcut函数处理

该用pd.cut当需按固定数值区间分桶(如收入0–5k、5–10k),必须选pd.qcut当要求每桶样本量均匀(如低/中/高收入三组人数相等);前者等宽,后者等频,重复值多时qcut需加duplicates='drop'。 什么时候该用 pd.cut 而不是 pd.qcut 核心区别在于划分依据:pd.cut 按数值区间(等宽)切分,pd.qcut 按分位数(等频)切分。比如你有一列收入数据,想按...

如何修复Python中NumPy数值溢出报错_通过np.seterr设置错误处理模式

因为np.seterr仅控制浮点异常(如over、divide),对整数溢出无效——后者静默回绕且不触发任何警告或异常;浮点溢出需配合errstate上下文才能立即抛FloatingPointError,而非依赖全局seterr。 为什么 np.seterr 不能捕获所有溢出错误 因为 np.seterr 只控制 NumPy 内置的浮点异常行为(如 over、under、invalid、divid...

如何正确使用 scipy.optimize.minimize 进行数值优化

scipy.optimize.minimize 可能因默认步长过小而无法启动迭代,导致“优化成功但零次迭代”;关键在于显式设置 options 中的 eps 参数以控制数值梯度精度。 scipy.optimize.minimize 可能因默认步长过小而无法启动迭代,导致“优化成功但零次迭代”;关键在于显式设置 options 中的 eps 参数以控制数值梯度精度。 在使用 scipy.optimi...

如何基于条件批量删除重复行:当某列存在超阈值数值时清除同组所有重复项

本文介绍一种高效处理Pandas DataFrame重复数据的策略:对按指定列(如A)分组的行,若组内任意一行在目标列(如B)的值超过阈值(如100),则保留该组中首次出现的行,并删除其余所有重复行;否则保留全部。适用于含缺失值、非数值型分组键等复杂场景。 本文介绍一种高效处理pandas dataframe重复数据的策略:对按指定列(如a)分组的行,若组内任意一行在目标列(如b)的值超过阈值(如...

如何基于条件删除重复行:保留每组中存在超阈值数值的整组,否则仅留首行

本文介绍使用pandas高效清洗数据的方法:对指定列(如a)分组后,若组内任意行在另一列(如b)存在大于阈值(如100)的值,则保留该组全部行;否则仅保留该组首次出现的行。 本文介绍使用pandas高效清洗数据的方法:对指定列(如a)分组后,若组内任意行在另一列(如b)存在大于阈值(如100)的值,则保留该组全部行;否则仅保留该组首次出现的行。 在实际数据分析中,常需按某列(如用户ID、类别标签)...

优化JavaScript日期输入框:解决自动斜杠格式化中的删除难题

本教程探讨JavaScript中日期输入框自动添加斜杠时遇到的删除难题,特别是光标在斜杠处停止的问题。通过采用基于keypress和input事件的优化策略,我们展示如何实现流畅的数字输入和自动格式化(如MM/DD/YYYY),同时改善用户删除字符的体验。文章提供详细代码示例,并讨论了光标行为及最佳实践,旨在提升用户界面的交互性和可用性。日期输入框格式化中的删除困境 在web开发中,为日期输入框实...