二进制转十进制在C语言中可以通过多种方法实现,以下是常见的方法及示例代码:
一、使用标准库函数
C语言提供了`strtol()`函数,可以方便地将二进制字符串转换为十进制整数。
```c
include include int main() { char binary_num[] = "1011"; int decimal_num = strtol(binary_num, NULL, 2); printf("Decimal: %dn", decimal_num); // 输出 11 return 0; } ``` 二、手动实现转换算法按权展开法
从右往左依次用二进制位上的数字乘以2的幂次方,然后将结果相加。例如二进制`1011`转换为十进制:
[
1 times 2^3 + 0 times 2^2 + 1 times 2^1 + 1 times 2^0 = 8 + 0 + 2 + 1 = 11
]
迭代法
通过循环遍历二进制字符串,逐位计算乘积并累加。例如:
```c
include include int binary2decimal(char str[]) { int sum = 0; int j = 1; int pos = strlen(str) - 1; for (; pos >= 0; pos--) { sum += (str[pos] - '0') * j; j *= 2; } return sum; } int main() { char binary_num[] = "1101"; int decimal_num = binary2decimal(binary_num); printf("Decimal: %dn", decimal_num); // 输出 13 return 0; } ``` 三、处理带符号数 对于带符号二进制数(最高位为符号位),需先判断符号,再转换其余部分。例如: ```c include include int binary2decimal(char str[]) { int sum = 0; int j = 1; int pos = strlen(str) - 1; int is_negative = (str == '-'); if (is_negative) { // 处理负数(需根据具体需求实现,此处仅示例) printf("Negative number: "); } for (; pos >= 0; pos--) { sum += (str[pos] - '0') * j; j *= 2; } return is_negative ? -sum : sum; } int main() { char binary_num1[] = "-1011"; char binary_num2[] = "1011"; printf("Decimal of %s: %dn", binary_num1, binary2decimal(binary_num1)); // 输出 -11 printf("Decimal of %s: %dn", binary_num2, binary2decimal(binary_num2)); // 输出 11 return 0; } ``` 四、注意事项 输入验证: 需确保输入的字符串仅包含`0`和`1`,且符合二进制格式。 对于长二进制数,可考虑使用位运算优化,例如: ```c int binary2decimal_optimized(char str[]) { unsigned int decimal_num = 0; for (int i = 0; str[i] != '0'; i++) { decimal_num = (decimal_num << 1) | (str[i] - '0'); } return (str == '-') ? -decimal_num : decimal_num; } ``` 该方法利用位移操作提高效率。 以上方法可根据具体需求选择实现,标准库函数适用于快速开发,手动实现则有助于理解转换原理。效率优化: