首页  > 教育解读  > 二进制转十进制的c是怎么算

二进制转十进制的c是怎么算

2025-05-03 22:40:48
起步向前走
起步向前走已认证

起步向前走为您分享以下优质知识

二进制转十进制在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