
起步向前走为您分享以下优质知识
二进制转十进制在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