C语言如何实现十进制小数转二进制?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

十进制小数转二进制(C语言实现)

以下是一个将十进制小数转换为二进制表示的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;
}

程序说明

  1. 输入处理

    程序首先要求用户输入一个十进制小数和转换精度(小数点后的位数)

  2. 整数部分转换

    • 使用除2取余法将整数部分转换为二进制
    • 从低位到高位存储,然后反向输出
  3. 小数部分转换

    十进制转二进制 小数 c语言
    (图片来源网络,侵删)
    • 使用乘2取整法将小数部分转换为二进制
    • 不断乘以2,取整数部分作为二进制位,直到达到指定精度或小数部分为0
  4. 输出

    • 整数部分和小数部分用点号连接
    • 如果精度不足,用0补齐

示例运行

请输入一个十进制小数: 10.625
请输入转换精度(小数点后位数): 6
二进制表示为: 1010.101000

注意事项

  1. 对于无限循环小数(如0.1),程序会根据指定的精度截断
  2. 输入的十进制数应为非负数
  3. 精度设置过高可能导致输出冗余,建议根据实际需求设置

如果需要处理负数,可以添加符号位的处理逻辑。

十进制转二进制 小数 c语言
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦dede仿站网盘资源如何获取?
« 上一篇 02-05
C语言实数两种表示形式具体指什么?
下一篇 » 02-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]