十进制小数分数与二进制的转换
2017-01-13 19:37
330 查看
十进制分数转换为二进制数
使用短除法。
例如将十进制分数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) # 整数部分
+ 1*(2^(-1))+1*(2^(-2))+1*(2^(-3)) # 小数部分
=5.875
附 python 版十进制与二进制转换
参考:
http://blog.csdn.net/caoguo_app_android/article/details/9955743
使用短除法。
例如将十进制分数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) # 整数部分
+ 1*(2^(-1))+1*(2^(-2))+1*(2^(-3)) # 小数部分
=5.875
附 python 版十进制与二进制转换
# coding=UTF-8 from decimal import Decimal def dec2bin(n, bit=20): """ n, integer or float to convert bit, bits after point return binary, string """ negative = False if n < 0: negative = True n *= -1 integer = int(n) decimal = n - integer binary = "" if n == 0: return "0" while integer != 0: result = int(integer % 2) integer /= 2 binary = str(result) + binary if decimal != 0: i = 0 decimal_bin = "" # binary decimal after convert while decimal != 0 and i < bit: result = int(decimal * 2) decimal = decimal * 2 - result decimal_bin += str(result) i += 1 binary = binary + '.' + decimal_bin if negative: binary = '-' + binary return binary def bin2dec(n): """ n binary, support point return integer or float """ negative = False if n < 0: negative = True n *= -1 integer = int(n) decimal = n - integer if integer != 0: integer_str = str(integer) length = len(integer_str) integer = 0 for i in xrange(0, length): bit = int(integer_str[i]) if bit == 1: integer += 2 ** (length - i - 1) elif bit != 0: print "invalid integer:" + str(n) if decimal != 0: decimal_str = str(decimal)[2:] # skip "0." length = len(decimal_str) decimal = 0 for i in xrange(0, length): bit = int(decimal_str[i]) if bit == 1: decimal += 2 ** (-1 * (i + 1)) elif bit != 0: print "invalid decimal:" + str(n) result = integer + decimal if negative: result *= -1 return result def testcases(): for pair in [(125, '1111101'), (1.3, '1.01001100110011001100'), (2.5, '10.1'), (0, '0'), (-1, '-1'), (0.5, '.1')]: assert pair[1] == dec2bin(pair[0]) for pair in [(-1001.1100, -9.75), (-1101, -13), (111.111, 7.875), (0.1101, 0.8125), (1001, 9), (0, 0), (0.1, 0.5)]: assert pair[1] == bin2dec(pair[0]) print "all test case success" if __name__ == "__main__": # testcases() print bin2dec(0.5)
参考:
http://blog.csdn.net/caoguo_app_android/article/details/9955743
相关文章推荐
- 十进制浮点小数转换二进制注意的问题点
- 转载:十进制小数转换成二进制小数的快速方法
- 十进制小数转换为二进制
- MODBUS协议 IEEE32位二进制浮点数与十进制小数转换的方法等内容
- java实现十进制小数转换二进制
- Python实现的十进制小数与二进制小数相互转换功能
- 十进制小数转换成二进制小数的快速方法
- 十进制小数与二进制小数之间的互相转换
- 十进制小数转换成二进制小数
- 十进制小数和二进制小数之间的转换
- java实现十进制整数或小数转换成二进制
- 从键盘输入某个十进制小数或整数,转换成对应的二进制小数并输出。 (查询十进制小数转换成二进制小数的算法,使用循环来实现。 最多保留小数位后7位数字即可)算法
- 十进制小数转换成二进制小数
- 十进制与二进制小数的相互转换C语言
- 十进制小数与二进制的相互转换
- 十进制小数和二进制小数之间的转换
- 二进制转换为十进制(包括小数转换)
- 小数的十进制与二进制之间的转换
- 十进制小数与二进制的相互转换
- 二进制转换为十进制(包括小数转换)