十进制小数分数与二进制之前的转换
Posted qy-blogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十进制小数分数与二进制之前的转换相关的知识,希望对你有一定的参考价值。
原文链接:https://blog.csdn.net/shelldon/article/details/54411472
十进制分数转换为二进制数
使用短除法。
例如将十进制分数11/28转换为二进制数,过程如下:
使用短除法。
例如将十进制分数11/28转换为二进制数,过程如下:
1、首先将分子分母分别转换成二进制
(11)10=(1011)2
(28)10=(11100)2
2、使用短除,借位时是借2,商只能是0或1
0.0110010
————————
11100 ) 1011.00
111 00
—————————
100 000
11 100
—————————
100 000
11 100
—————————
100
...
所以:11/28=1011/11100=0.01100100...
十进制小数转换为二进制小数
十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位。两部分分开转换。
整数部分 除以2取余,逆序排列。
小数部分 乘 2 取整,顺序排列。
例如转换十进制小数11.4,过程如下。
计算整数部分,11转换为二进制位1011:
余 数
+ ^
2 | 1 1 1 | 逆
+-+------+ | 序
2 | 5 1 | 写
+-+----+ | 出
2 | 2 0 |
+-+--+ |
2 | 1 1 |
+--+ +
0
计算小数部分0.4,首先将小数部分一直乘2,积的整数部分顺序取出:
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 |
可以看出0110是循环,因此小数部分的二进制是
0.01100110……(循环0110)
最终结果是整数位和小数位合并1101111.01100110……(2)
二进制小数转换为十进制小数
使用按权展开求和法,小数点左边是2的正数次方,从0开始;小数点右边是2的负数次方,从-1开始。
例如将101.111(2)转换成十进制数
1*(2^2)+0*(2^1)+1*(2^0) # 整数部分
使用按权展开求和法,小数点左边是2的正数次方,从0开始;小数点右边是2的负数次方,从-1开始。
例如将101.111(2)转换成十进制数
1*(2^2)+0*(2^1)+1*(2^0) # 整数部分
+ 1*(2^(-1))+1*(2^(-2))+1*(2^(-3)) # 小数部分
=5.875
以上是关于十进制小数分数与二进制之前的转换的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 405. 数字转换为十六进制数(补码的问题) / 166. 分数到小数(模拟长除法) / 482. 密钥格式化