
高山倡导者为您分享以下优质知识
以下是使用C语言实现二进制转换的几种方法,包括手动实现和调用标准库函数两种方式:
一、手动实现二进制转换
1. 十进制转二进制(除2取余法)
通过不断除以2取余数,将余数逆序排列即可得到二进制数。
代码示例:
```c
include
void decimalToBinary(int n) {
if (n == 0) {
printf("0");
return;
}
int remainder, p = 1;
printf("%d", n & 1); // 输出最低位
while (n >
1) {
remainder = n % 2;
n /= 2;
printf("%d", remainder * p);
p *= 10;
}
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制为: ");
decimalToBinary(num);
return 0;
}
```
运行示例:
```
输入一个十进制数: 56
二进制为: 111000
```
2. 二进制转十进制(按权展开求和)
通过将二进制每位乘以2的幂次后求和得到十进制数。
代码示例:
```c
include
int binaryToDecimal(int n) {
int decimal = 0, p = 1;
while (n >
0) {
int remainder = n % 10;
decimal += remainder * p;
p *= 2;
n /= 10;
}
return decimal;
}
int main() {
int binaryNum;
printf("请输入一个二进制数: ");
scanf("%d", &binaryNum);
printf("十进制为: %d
", binaryToDecimal(binaryNum));
return 0;
}
```
运行示例:
```
输入一个二进制数: 110110111
十进制为: 439
```
二、使用标准库函数实现转换
C语言标准库提供了``中的`printf`函数直接输出二进制(以`0b`开头)和十进制,但需注意`scanf`无法直接读取二进制输入,需通过字符数组处理。
代码示例:
```c
include
int main() {
int decimal;
printf("请输入一个十进制数: ");
scanf("%d", &decimal);
// 转换为二进制
printf("二进制为: 0b");
while (decimal >
0) {
printf("%d", decimal & 1);
decimal /= 2;
}
printf("
");
// 转换为八进制
printf("八进制为: %o
", decimal);
// 转换为十六进制
printf("十六进制为: %x
", decimal);
return 0;
}
```
运行示例:
```
输入一个十进制数: 255
二进制为: 0b11111111
八进制为: 377
十六进制为: ff
```
三、其他注意事项
上述代码未对输入进行验证,实际应用中需添加检查(如输入范围、非负数判断等)。
手动实现时需注意数组大小,避免溢出(如8位二进制需使用`unsigned char`数组)。
建议将转换逻辑封装为函数,提高代码复用性(如`decimalToBinary`和`binaryToDecimal`)。
通过以上方法,可灵活实现二进制与十进制之间的转换。