编写一个二进制数转十进制数程序。输入一个有符号二进制整数,输出一个有符号的十进制整数,要求用按权展开的方式实现程序
时间: 2024-11-29 12:39:09 浏览: 69
要使用按权展开的方式(也称为“权重”或“位权法”)来实现二进制数转换成十进制数,你可以创建一个循环,遍历输入的二进制字符串的每一位,然后根据每位的值乘以对应的权重(2的幂次)。如果二进制数是负数,你需要处理符号。
以下是一个简单的C语言程序,实现了这个功能:
```c
#include <stdio.h>
#include <string.h>
// 函数声明,返回二进制转十进制的结果
int binaryToDecimal(const char *binary);
int main() {
char input[50];
printf("请输入一个有符号的二进制整数(例如:10101): ");
fgets(input, sizeof(input), stdin); // 注意fgets防止末尾空格
int decimal = binaryToDecimal(input);
if (decimal < 0) {
printf("转换后的十进制数为: -%d\n", decimal);
} else {
printf("转换后的十进制数为: %d\n", decimal);
}
return 0;
}
// 按权展开函数实现
int binaryToDecimal(const char *binary) {
int result = 0;
int power = 0;
for (int i = strlen(binary) - 1; i >= 0; i--) {
if (binary[i] == '1') { // 如果是1,则加上当前权重
result += pow(2, power);
}
power++; // 移动到下一位
}
// 处理负数的情况
if (*binary == '-') {
result = -result;
}
return result;
}
```
在这个程序中,`binaryToDecimal`函数接收一个字符串类型的二进制数,从右向左遍历并计算每个数字位置上的权重。如果输入的是负数,我们还会在开始时检查第一个字符是否为'-',如果是则结果取反。
阅读全文
相关推荐





