编写一个有符号二进制数转有符号十进制数C程序(用按权展开的方法实现)
时间: 2024-11-13 16:41:23 浏览: 6
编写一个有符号二进制数转换成有符号十进制数的C程序,可以使用按权展开法,也称为“从右向左”逐位相加的方法。以下是一个简单的示例:
```c
#include <stdio.h>
#include <limits.h>
// 定义符号位
#define SIGN_BIT 0
// 按位值计算十进制数
int binaryToDecimal(int binary) {
int decimal = 0;
int sign = 1; // 初始无负号,0表示正,1表示负
if (binary & (1 << SIGN_BIT)) { // 判断最高位是否为1(即为负数)
sign = -1;
}
for (int i = 0; i < sizeof(binary) * CHAR_BIT; i++) {
if ((binary >> i) & 1) { // 右移并检查当前位是否为1
decimal += sign * (1 << i); // 加上相应的权重
}
}
return decimal;
}
int main() {
int binaryInput;
printf("请输入一个有符号二进制数(例如: 1010): ");
scanf("%d", &binaryInput);
int decimalOutput = binaryToDecimal(binaryInput);
printf("该二进制数 %d 转换成十进制为 %d\n", binaryInput, decimalOutput);
return 0;
}
```
在这个程序中,我们首先读取用户输入的二进制数,然后通过遍历每一位并加上相应的权重(2^i),根据最高位的符号决定是正还是负。最后,将结果输出到屏幕上。
阅读全文