C语言二进制转十进制,如何实现?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

方法1:逐位计算(数学方法)

原理:二进制数的每一位代表2的幂次方,从右到左(最低位到最高位)依次是2^0, 2^1, 2^2, ...,将每一位的值乘以对应的2的幂次方,然后相加即可得到十进制数。

c语言 二进制 转 十进制
(图片来源网络,侵删)

步骤

  1. 初始化结果为0。
  2. 从二进制数的最低位(最右边)开始遍历每一位。
  3. 对于每一位,如果该位是1,则将结果加上对应的2的幂次方。
  4. 移动到下一位(幂次方加1)。

代码示例

#include <stdio.h>
#include <string.h> // 用于strlen函数
int binaryToDecimal(const char *binaryStr) {
    int decimal = 0;
    int length = strlen(binaryStr);
    for (int i = 0; i < length; i++) {
        if (binaryStr[i] == '1') {
            decimal += (1 << (length - i - 1)); // 等价于2^(length-i-1)
        }
    }
    return decimal;
}
int main() {
    char binaryStr[] = "1010"; // 示例二进制数
    int decimal = binaryToDecimal(binaryStr);
    printf("二进制 %s 转换为十进制是: %d\n", binaryStr, decimal);
    return 0;
}

输出

二进制 1010 转换为十进制是: 10

方法2:使用标准库函数(strtol

原理:C标准库提供了strtol函数,可以将字符串形式的二进制数转换为长整型十进制数。

c语言 二进制 转 十进制
(图片来源网络,侵删)

步骤

  1. 使用strtol函数,指定基数为2(表示二进制)。
  2. 处理可能的错误(如非法字符)。

代码示例

#include <stdio.h>
#include <stdlib.h> // 用于strtol
#include <errno.h>  // 用于错误处理
int main() {
    char binaryStr[] = "1101";
    char *endPtr;
    long decimal;
    errno = 0; // 重置错误标志
    decimal = strtol(binaryStr, &endPtr, 2); // 基数为2
    // 检查转换是否成功
    if (errno != 0 || *endPtr != '\0') {
        printf("输入的二进制数无效!\n");
        return 1;
    }
    printf("二进制 %s 转换为十进制是: %ld\n", binaryStr, decimal);
    return 0;
}

输出

二进制 1101 转换为十进制是: 13

方法3:逐位处理(从左到右)

原理:从二进制数的最高位开始,逐步累加结果,每次将结果乘以2,然后加上当前位的值。

c语言 二进制 转 十进制
(图片来源网络,侵删)

步骤

  1. 初始化结果为0。
  2. 遍历二进制数的每一位(从左到右)。
  3. 每次将结果乘以2,然后加上当前位的值(0或1)。

代码示例

#include <stdio.h>
#include <string.h>
int binaryToDecimal(const char *binaryStr) {
    int decimal = 0;
    for (int i = 0; binaryStr[i] != '\0'; i++) {
        decimal = decimal * 2 + (binaryStr[i] - '0');
    }
    return decimal;
}
int main() {
    char binaryStr[] = "1111"; // 示例二进制数
    int decimal = binaryToDecimal(binaryStr);
    printf("二进制 %s 转换为十进制是: %d\n", binaryStr, decimal);
    return 0;
}

输出

二进制 1111 转换为十进制是: 15

方法 优点 缺点
逐位计算(数学) 直观,适合理解原理 需要计算幂次方,效率稍低
strtol函数 代码简洁,适合生产环境 需要处理错误情况
逐位处理(左到右) 效率高,无需额外计算 需要遍历整个字符串

根据实际需求选择合适的方法:

  • 如果是学习或手动实现,推荐方法1或方法3
  • 如果是实际项目开发,推荐方法2(strtol,因为它更简洁且高效。
-- 展开阅读全文 --
头像
dede后台如何限制内容长度?
« 上一篇 02-19
dede sql标签如何实现分页?
下一篇 » 02-19
取消
微信二维码
支付宝二维码

目录[+]