小数十进制转二进制

  • A+
所属分类:FPGA

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

一、十进制小数转二进制

小数部分十进制小数乘以 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日 长沙

w3cjava

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: