最稳妥用std::bitset,需显式指定宽度(如std::bitset<32>(x).to_string()),负数按补码存储;C++20可用std::format("{:b}", x),但兼容性差;itoa非标准,应避免。

C++ int转二进制怎么写 C++ 整数转二进制方法【示例】

std::bitset 最稳妥,但要注意类型宽度

直接转二进制字符串,std::bitset 是标准库里最省心的选择,不用手动位运算、不依赖编译器扩展。但它要求编译时知道整数位宽——比如 int 通常是 32 位,但标准没规定,所以不能写 std::bitsetsizeof 不是常量表达式)。

手写循环位移容易漏掉高位或符号位

自己写循环右移再取 & 1 看似直观,但有三个常见翻车点:没处理负数、没考虑 int 可能是 32 或 64 位、循环次数写死成 32 却在 64 位系统上截断。

std::format(C++20)简洁但兼容性差

C++20 引入了 std::format,写起来最干净:std::format("{:b}", x) 直接出二进制字符串。但它目前只被较新编译器支持(GCC 13+、Clang 15+、MSVC 19.32+),且 libc++ 和 libstdc++ 实现进度不一。

别用 itoa:它不是标准函数

很多老代码里出现 itoa(x, buf, 2),看着方便,但它根本不在 C++ 标准里,是某些 C 库(如 MSVC CRT、glibc 的非标准扩展)提供的。跨平台一编译就报错:'itoa' was not declared in this scope

真正麻烦的从来不是“怎么转”,而是“转出来是不是你想要的二进制”——补码?原码?要不要前导零?有没有符号?这些细节不提前想清楚,后面调试花的时间远超写几行代码。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。