C++中二进制转十进制主要有三种方法:1. 手动按权展开,通过循环逐位计算;2. 使用字符串处理,避免溢出并校验输入合法性;3. 利用bitset类进行固定长度转换。

在C++中,将二进制数转换为十进制有多种方法,最常见的是使用数学计算逐位处理,或者借助标准库函数。下面介绍几种实用且清晰的实现方式。
1. 手动计算:按权展开法
二进制转十进制的基本原理是“按权展开”,从右到左每一位的权重是2的幂次(从0开始)。例如,二进制数1101对应的十进制为:
1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13
代码实现如下:
立即学习“C++免费学习笔记(深入)”;
#include using namespace std;int binaryToDecimal(long long n) {int decimal = 0, base = 1; // base 表示当前位的权重(2^i)while (n > 0) {int lastDigit = n % 10; // 取出最后一位decimal += lastDigit base; // 加上该位对应的十进制值base = 2; // 权重乘以2(进入下一位)n /= 10; // 去掉最后一位}return decimal;}
int main() {long long binary;cout <> binary;cout << "对应的十进制是:" << binaryToDecimal(binary) << endl;return 0;}
2. 使用字符串处理更安全的方法
当输入的二进制数较长时,用整数存储可能溢出。改用字符串可以避免这个问题,并且便于验证每一位是否为0或1。
#include #include using namespace std;int binaryToDecimal(string binaryStr) {int decimal = 0;int power = 1; // 当前位权重,从2^0开始
// 从右往左遍历字符串for (int i = binaryStr.length() - 1; i >= 0; i--) { if (binaryStr[i] == '1') { decimal += power; } else if (binaryStr[i] != '0') { cout << "错误:包含非二进制字符!" << endl; return -1; } power *= 2;}return decimal;
}
int main() {string binary;cout > binary;int result = binaryToDecimal(binary);if (result != -1) {cout
3. 使用bitset进行简单转换(已知长度)
如果你知道二进制位数(比如8位、16位),可以用std::bitset简化转换过程。
#include #include using namespace std;int main() {string binary = "1101";bitset bs(binary); // 假设最多8位cout << "十进制是:" << bs.to_ulong() << endl;return 0;}
注意:to_ulong()会返回无符号长整型,适用于合法二进制字符串。
4. 十进制转二进制(补充)
顺带一提,十进制转二进制常用“除2取余”法:
#include using namespace std;void decimalToBinary(int n) {if (n == 0) {cout < 0) {cout << n % 2;n /= 2;}cout << endl;}// 注意:输出是逆序的,实际应用中可用栈或字符串反转
基本上就这些。手动循环适合学习理解,字符串法最实用,bitset适合固定长度场景。选择合适方法即可。
以上就是c++++怎么将二进制转换为十进制_c++二进制与十进制转换方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1479405.html
微信扫一扫
支付宝扫一扫