• 小数十进制转二进制


    整数部分的十进制和二进制转换很容易,下面我们只考虑小数部分的转化:

    一、十进制小数转二进制

    小数部分十进制小数乘以 2,得出的积,然后把积的整数位取出,再用积的小数部分乘以 2,再把积的整数位取出,再用小数部分乘以 2,循环操作,直到小数部分为 0,或者遇到无限循环,取到你认为足够精度的小数为止,然后把取出的整数位顺序连接起来,就是要转换成的二进制小数。

    例如:

    0.125的十进制转换成二进制形式

    计算

    取整数部分

    0.125*2=0.25

    0

    0.25*2=0.5

    0

    0.5*2=1

    1

    所以:

    0.125的二进制形式为0.001

    比如:0.4 要转换成二进制数

    0.4* 2= 0.8取整数位0

    0.8* 2= 1.6取整数位1

    0.6* 2= 1.2取整数位1

    0.2* 2= 0.4取整数位0

    0.4* 2= 0.8取整数位0

    0.8* 2= 1.6取整数位1

    0.6* 2= 1.2取整数位1

    0.2* 2= 0.4取整数位0

    0.4* 2= 0.8取整数位0

    0.8* 2= 1.6取整数位1

    ......

    这样就会无限循环下去,小数部分也不会为 0。那就取一个你认为合适的精度。

    0.0110011001

    = 0.39941406 //无限接近0.4

    这样看来,最末尾的数字如果不是5,最后的都只能根据所需精度取近似值。

    二、二进制小数转换成十进制

          从二进制小数部分的左边第一位开始,由高位到低位,依次乘以 2 的 -1 次方,2 的 -2 次方,2的 -3 次方... 最后把所有的结果相加,就是要转换的十进制小数。

    第1位*1/2   (即0.5)

    第2位*1/4   (即0.25)

    第3位*1/8   (即0.125)

    第4位*1/16 (即0.0625)

    .

    .

    .

    .

    例如:

    0.001的二进制转换成十进制数

    位数

    位值

    计算

    结果

    加和

    1

    0

    0*0.5=0

    0

    2

    0

    0*0.25=0

    0

    3

    1

    1*0.125=0.125

    0.125

    0.125

    例如:

    0.1011的二进制转换成十进制数

    位数

    位值

    计算

    结果

    加和

    1

    1

    1*0.5=0.5

    0.5

    2

    0

    0*0.25=0

    0

    3

    1

    1*0.125=0.125

    0.125

    4

    1

    1*0.0625=0.0625

    0.0625

    0.6875

    所以

    1位小数的精度是 2^-1 =0.5

    2位小数的精度是 2^-2 =0.25

    3位小数的精度是 2^-3 =0.125

    4位小数的精度是 2^-4 =0.03125

    5位小数的精度是2^-5  =0.015625

    所以你希望精度是0.1,或者0.01都是做不到的,那样只能取近似值;

    三、小数十进制转换为16进制

    小数部分十进制小数乘以16,得出的积,然后把积的整数位取出,再用积的小数部分乘以16,再把积的整数位取出,再用小数部分乘以 16,循环操作,直到小数部分为 0,或者遇到无限循环,取到你认为足够精度的小数为

    止,然后把取出的整数位顺序连接起来,就是要转换成的16进制小数。

    0.125的十进制转换成16进制形式:

    0.125* 16= 2取整数位2

    0.125的十六进制形式为0.2

    考虑前面0.125计算出来的二进制形式为0.001,我们四位一组补齐,那么0.125的二进制形式为0.0010,整数中的二进制0010B=2H,这样直接就得到了16进制的0.2;

    再举一例测试:十进制的0.375分别转换成二进制数和十六进制数分别是:

    1、按十到二进制转换方法计算得出0.375的二进制表示为:0.011    

    2、按十到二进制转换方法计算得出0.375的二进制表示为:0.6

    我们将0.375的二进制结果末尾0.011补0凑成四位,则得到0.375的二进制表示为0.0110,于是根据整数二进制十六进制转换方法得到0.375的十六进制结果为0.6;

    于是得到小数二进制和十六进制的转换方式和整数部分是相同的,二进制往右补0,补齐4位,8位,12位等4的倍数位数即可;

    再用前面的0.4为例计算:

    0.4*16= 6.4取整数位6

    0.4* 16= 6.4取整数位6

    0.4* 16= 6.4取整数位6

    ......

    这样会无限循环下去…我们取两位得到0.4的十六进制结果是0.66,按三中的分析方法,直接得到0.4二进制结果是0.01100110。这和前面利用十进制转二进制方法的得到的结果是一致的。

    由此推广到所有小数的进制互换,二进制,八进制,十进制,十六进制表示方法之间的相互转换,顿时豁然。

                                                         2022年8月5日 长沙

  • 相关阅读:
    新建SpringCloud电商前端Vant项目
    linux内核添加系统调用
    漫谈计算机网络:番外篇 ------网络安全相关知识——>公钥与私钥、防火墙与入侵检测
    基于4G智能网关的野外光伏逆变器数据采集方案
    基于区块链的隐私计算 - 原理和实践
    mysql数据库优化之数据库非sql优化
    Kafka/Spark-01消费topic到写出到topic
    SSM+老年人活动信息管理系统 毕业设计-附源码121730
    Flink学习第六天——Flink常见的运行部署模式介绍和运行流程浅析
    性能测试常见问题总结
  • 原文地址:https://blog.csdn.net/xh_24/article/details/126188917