在C语言中,将十进制数转换为二进制数通常采用 除2取余,逆序输出的方法。以下是具体说明和示例代码:
一、转换原理
除2取余法 通过不断将十进制数除以2,记录每次的余数(余数为1或0),直到商为0。 例如将23.375转换为二进制:
```
23 / 2 = 11 余 1
11 / 2 = 5 余 1
5 / 2 = 2余 1
2 / 2 = 1余 0
1 / 2 = 0余 1
```
得到余数序列:1, 1, 1, 0, 1,逆序排列后为10111。
整数与小数转换
- 整数部分: 同上述方法; - 小数部分
二、代码实现
整数转换函数 ```c
include include
void dec2bin(long dec, char *pbin) {
char result = {0}; // 存储二进制结果
int index = 0;
while (dec > 0) {
result[index++] = (dec % 2) + '0';
dec /= 2;
}
result[index] = '0'; // 添加字符串结束符
// 反转字符串
for (int i = 0; i < index / 2; i++) {
char temp = result[i];
result[i] = result[index - i - 1];
result[index - i - 1] = temp;
}
strcpy(pbin, result);
}
int main() {
long num;
printf("输入一个十进制整数: ");
scanf("%ld", &num);
char bin;
dec2bin(num, bin);
printf("%ld 的二进制表示为: %sn", num, bin);
return 0;
}
```
该函数通过循环实现除2取余,并将结果存储在字符数组中,最后反转数组得到正确二进制表示。
使用标准库函数
include
void dec2bin(long dec, char *pbin) {
char result = {0}; // 存储二进制结果
int index = 0;
while (dec > 0) {
result[index++] = (dec % 2) + '0';
dec /= 2;
}
result[index] = '0'; // 添加字符串结束符
// 反转字符串
for (int i = 0; i < index / 2; i++) {
char temp = result[i];
result[i] = result[index - i - 1];
result[index - i - 1] = temp;
}
strcpy(pbin, result);
}
int main() {
long num;
printf("输入一个十进制整数: ");
scanf("%ld", &num);
char bin;
dec2bin(num, bin);
printf("%ld 的二进制表示为: %sn", num, bin);
return 0;
}
```
该函数通过循环实现除2取余,并将结果存储在字符数组中,最后反转数组得到正确二进制表示。
使用标准库函数
C语言提供`itoa`函数(需包含`stdlib.h`)或`snprintf`实现转换:
```c
include include int main() { int num; printf("输入一个十进制整数: "); scanf("%d", &num); char bin; // 2^32 + 1 足够存储32位整数 snprintf(bin, sizeof(bin), "%ld", num); printf("%d 的二进制表示为: %sn", num, bin); return 0; } ``` 注意:`itoa`是C标准库中的非标准函数,部分编译器可能不支持,推荐使用`snprintf`。
三、注意事项
数据类型限制: `long`类型在64位系统上可表示最大值2^64-1,转换时需注意数组大小; 负数处理
通过上述方法,可灵活实现十进制与二进制之间的转换。