在C语言中,将二进制转换为十进制的方法主要有以下两种:
一、使用字符串处理(推荐方法)
通过逐位遍历二进制字符串,将字符转换为数字并计算十进制值。适用于输入为二进制字符串的情况。
示例代码:
```c
include include int binaryToDecimal(char *binary) { int decimal = 0; int length = strlen(binary); for (int i = 0; i < length; i++) { int bit = binary[i] - '0'; // 将字符转换为数字 decimal = decimal * 2 + bit; // 计算十进制值 } return decimal; } int main() { char binary; printf("请输入一个二进制数: "); scanf("%s", binary); int decimal = binaryToDecimal(binary); printf("对应的十进制数为: %dn", decimal); return 0; } ``` 说明: 1. 使用`scanf`读取二进制字符串(需确保输入仅包含0和1)。 2. 通过`strlen`获取字符串长度,逐位计算十进制值。 3. 返回计算结果。
二、使用位运算(适用于整数输入)
通过位运算符(如`&`、`>>`)直接处理整数二进制数,效率较高。
示例代码:
```c
include
int binaryToDecimal(int n) {
int decimal = 0;
while (n > 0) {
int remainder = n % 10; // 获取最低位
decimal += remainder * (1 << (7 - __builtin_clz(n))); // 计算2的幂次
n /= 10; // 去掉最低位
}
return decimal;
}
int main() {
int n;
printf("请输入一个二进制数: ");
scanf("%d", &n);
int decimal = binaryToDecimal(n);
printf("对应的十进制数为: %dn", decimal);
return 0;
}
```
说明:
1. 使用`scanf`读取整数二进制数(需确保输入为二进制表示)。
2. 通过`__builtin_clz`函数计算二进制位数,动态计算2的幂次。
3. 返回计算结果。
注意事项
输入验证:若输入为二进制字符串,需确保仅包含`0`和`1`,否则`atoi`或位运算可能出错。
负数处理:位运算方法需额外处理负数(如使用补码表示)。
以上方法均可实现二进制到十进制的转换,选择时可根据输入类型(字符串或整数)及性能需求决定。