
心有灵犀为您分享以下优质知识
二进制转十进制在C语言中可通过以下两种常见方法实现:
一、逐位计算法(适用于字符串输入)
通过遍历二进制字符串,从高位到低位逐位计算其对应的十进制值。具体步骤如下:
使用`scanf`或`gets`获取二进制字符串(需注意`gets`存在安全隐患,建议使用`fgets`)。
从左到右遍历字符串,将每个字符转换为数字(`'0'`或`'1'`),并计算其对应的十进制值(如`1*2^n + 1*2^(n-1)`)。
将所有位的十进制值累加得到最终结果。
示例代码:
```c
include
include
int binaryToDecimal(char *binary) {
int decimal = 0;
int n = strlen(binary);
for (int i = 0; i < n; i++) {
int bit = binary[i] - '0';
decimal = decimal * 2 + bit;
}
return decimal;
}
int main() {
char binary;
printf("请输入二进制数: ");
fgets(binary, sizeof(binary), stdin);
// 去除末尾换行符
binary[strcspn(binary, "n")] = 0;
int decimal = binaryToDecimal(binary);
printf("对应的十进制数为: %dn", decimal);
return 0;
}
```
二、数学运算法(适用于整数输入)
通过不断取余和除以2的操作,将二进制数转换为十进制。具体步骤如下:
使用`scanf`获取二进制整数(需注意范围限制)。
通过循环计算`n % 2`(当前位)和`n / 2`(右移一位),并累加结果(`n % 2 * 2^i`)。
最终得到十进制值。
示例代码:
```c
include
long long convertBinaryToDecimal(long long n) {
long long decimal = 0;
int i = 0;
while (n >
0) {
int remainder = n % 10;
decimal += remainder * pow(2, i);
n /= 10;
i++;
}
return decimal;
}
int main() {
long long n;
printf("输入一个二进制数: ");
scanf("%lld", &n);
printf("二进制数 %lld 转换为十进制为 %lldn", n, convertBinaryToDecimal(n));
return 0;
}
```
注意事项
输入验证:确保输入的二进制数仅包含`0`和`1`,避免非法字符导致错误。
效率与精度:逐位计算法适用于任意长度的二进制字符串,数学运算法仅适用于固定长度的整数输入。
以上方法均可实现二进制到十进制的转换,可根据实际需求选择合适的方式。