十进制整数、小数转二进制
程序员文章站
2022-07-15 09:36:16
...
整数转二进制(除2取余,逆序排列)
以23
为例:
23/2 =11…1
11/2 =5…1
5/2 =2…1
2/2 =1…0
1/2 =0…1
将所有余数逆序排列,即得到23
的二进制表示:10111
小数转二进制(乘2取整,顺序排列)
以0.6875
为例:
0.6875*2 =1.375 (整数部分为1)
0.375*2 =0.75 (整数部分为0)
0.75*2 =1.5 (整数部分为1)
0.5*2 =1.0 (整数部分为1)
(计算结束)
所有整数部分顺序排列,得到0.6875
的二进制表示:0.1011
代码实现
题外话:Python可以通过参数名
:参数类型
的方式指定参数类型,想当然的以为可以像Java一样Override
,结果是:同名函数调用距离最近的
# 十进制转二进制(正数)
def dec2bin(integer: int, decimal_fraction: float):
# interger:整数部分,decimal_fraction:小数部分
bin = ""
# 整数转二进制
while integer:
bin = str(integer % 2)+bin
integer //= 2
# 小数转二进制,因为浮点数在计算机的存储问题,得出结果与手算会有差异
bin += "."
while decimal_fraction:
decimal_fraction *= 2
if decimal_fraction >= 1.0:
decimal_fraction -= 1
bin += "1"
else:
bin += "0"
print(bin)
if __name__ == "__main__":
dec2bin(23, 0.6875)
10111.1011