
抓住机遇为您分享以下优质知识
二进制到十进制的编程实现主要通过逐位计算每一位的权重并累加完成。以下是两种常见的实现方式:
一、基于字符数组的迭代实现(推荐)
通过读取用户输入的二进制字符串,从右向左逐位计算其对应的十进制值。
```c
include
include
include
int binaryToDecimal(const char *binary) {
int decimal = 0;
int base = 1;
int len = strlen(binary);
for (int i = len - 1; i >
= 0; i--) {
int digit = binary[i] - '0';
if (digit != 0 && digit != 1) {
printf("输入的不是二进制数!n");
return -1;
}
decimal += digit * base;
base *= 2;
}
return decimal;
}
int main() {
char binary;
printf("输入一个二进制数: ");
scanf("%s", binary);
int result = binaryToDecimal(binary);
if (result != -1) {
printf("十进制数为: %dn", result);
}
return 0;
}
```
说明:
1. 使用`scanf`读取二进制字符串,`strlen`获取长度。
2. 从右向左遍历字符串,将每一位转换为数字并计算其权重(2的幂次)。
3. 若输入包含非0或1字符,程序会提示错误并退出。
二、基于位运算的优化实现
通过位运算直接处理二进制数,效率更高。
```c
include
int binaryToDecimal(unsigned int n) {
int decimal = 0;
while (n >
0) {
int digit = n & 1; // 获取最低位
decimal += digit * (1 >
= 1; // 右移一位
}
return decimal;
}
int main() {
unsigned int binary;
printf("输入一个二进制数: ");
scanf("%u", &binary);
printf("十进制数为: %dn", binaryToDecimal(binary));
return 0;
}
```
说明:
1. 使用`unsigned int`存储二进制数,避免符号位影响计算。
2. `n & 1`获取最低位(0或1)。
3. `1