在C++中进行进制转换和数值格式化输出是编程中常见的需求,尤其在嵌入式开发、算法题处理或数据调试时非常实用。下面介绍如何使用标准库实现十进制与其他进制(二、八、十六)之间的转换,并对输出进行格式化控制。
支持的进制转换类型C++原生支持以下几种进制的输入输出:
- 十进制(decimal):默认格式
- 八进制(octal):使用std::oct
- 十六进制(hexadecimal):使用std::hex
- 二进制(binary):C++14起支持0b前缀输入,输出需手动实现或使用std::bitset
通过iostream和流控制符,可以方便地格式化数值输出:
#include <iostream> #include <iomanip> using namespace std; int main() { int num = 255; cout << "原始值: " << num << endl; cout << "八进制: " << oct << num << endl; cout << "十六进制: " << hex << num << endl; cout << "十进制: " << dec << num << endl; return 0; }
输出结果为:
原始值: 255八进制: 377
十六进制: ff
十进制: 255 二进制输出的实现方法
C++标准库未提供直接输出二进制的流操作符,但可通过std::bitset实现:
#include <iostream> #include <bitset> using namespace std; int main() { int num = 255; cout << "二进制: " << bitset<8>(num) << endl; // 8位宽度 cout << "16位二进制: " << bitset<16>(num) << endl; return 0; }
输出:
二进制: 1111111116位二进制: 0000000011111111 自定义任意进制转换函数
若需转换为其他进制(如三进制、五进制等),可编写通用函数:
#include <iostream> #include <string> #include <algorithm> using namespace std; string toBase(int num, int base) { if (num == 0) return "0"; const string digits = "0123456789ABCDEF"; string result; bool negative = false; if (num < 0 && base <= 10) { negative = true; num = -num; } while (num) { result += digits[num % base]; num /= base; } if (negative) result += '-'; reverse(result.begin(), result.end()); return result; } int main() { cout << "255 转二进制: " << toBase(255, 2) << endl; cout << "255 转八进制: " << toBase(255, 8) << endl; cout << "255 转十六进制: " << toBase(255, 16) << endl; cout << "100 转三进制: " << toBase(100, 3) << endl; return 0; }格式化控制与补零输出
结合iomanip可实现宽度和填充控制:
#include <iostream> #include <iomanip> #include <bitset> using namespace std; int main() { int num = 42; cout << "十六进制补零: " << setfill('0') << setw(4) << hex << num << endl; cout << "二进制8位显示: " << setfill('0') << setw(8) << bitset<8>(num) << endl; return 0; }
输出:
十六进制补零: 002a二进制8位显示: 00101010
基本上就这些常用方法。利用标准库的流控制和辅助类,可以高效完成进制转换与格式化输出,满足大多数开发需求。不复杂但容易忽略的是进制转换时的符号处理和位宽设置。}
以上就是C++进制转换工具 数值计算格式化输出的详细内容,更多请关注知识资源分享宝库其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。