十进制小数转二进制(C语言实现)
以下是一个将十进制小数转换为二进制表示的C语言程序:

(图片来源网络,侵删)
#include <stdio.h>
#include <math.h>
// 函数:将十进制小数转换为二进制字符串
void decimalFractionToBinary(double decimal, int precision) {
// 处理整数部分为0的情况
if (decimal == 0.0) {
printf("0.");
for (int i = 0; i < precision; i++) {
printf("0");
}
printf("\n");
return;
}
// 提取整数部分和小数部分
int integerPart = (int)decimal;
double fractionalPart = decimal - integerPart;
// 转换整数部分
if (integerPart == 0) {
printf("0");
} else {
int binaryInteger[32]; // 足够大的数组存储整数部分的二进制
int index = 0;
while (integerPart > 0) {
binaryInteger[index++] = integerPart % 2;
integerPart /= 2;
}
// 反向输出整数部分的二进制
for (int i = index - 1; i >= 0; i--) {
printf("%d", binaryInteger[i]);
}
}
printf(".");
// 转换小数部分
double temp = fractionalPart;
int binaryFraction[precision]; // 存储小数部分的二进制
int count = 0;
while (temp > 0 && count < precision) {
temp *= 2;
int bit = (int)temp;
binaryFraction[count++] = bit;
temp -= bit;
}
// 输出小数部分的二进制
for (int i = 0; i < precision; i++) {
if (i < count) {
printf("%d", binaryFraction[i]);
} else {
printf("0"); // 补零以达到指定精度
}
}
printf("\n");
}
int main() {
double decimal;
int precision;
printf("请输入一个十进制小数: ");
scanf("%lf", &decimal);
printf("请输入转换精度(小数点后位数): ");
scanf("%d", &precision);
printf("二进制表示为: ");
decimalFractionToBinary(decimal, precision);
return 0;
}
程序说明
-
输入处理:
程序首先要求用户输入一个十进制小数和转换精度(小数点后的位数)
-
整数部分转换:
- 使用除2取余法将整数部分转换为二进制
- 从低位到高位存储,然后反向输出
-
小数部分转换:
(图片来源网络,侵删)- 使用乘2取整法将小数部分转换为二进制
- 不断乘以2,取整数部分作为二进制位,直到达到指定精度或小数部分为0
-
输出:
- 整数部分和小数部分用点号连接
- 如果精度不足,用0补齐
示例运行
请输入一个十进制小数: 10.625
请输入转换精度(小数点后位数): 6
二进制表示为: 1010.101000
注意事项
- 对于无限循环小数(如0.1),程序会根据指定的精度截断
- 输入的十进制数应为非负数
- 精度设置过高可能导致输出冗余,建议根据实际需求设置
如果需要处理负数,可以添加符号位的处理逻辑。

(图片来源网络,侵删)
