欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

十进制整数、小数转二进制

程序员文章站 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


参考:十进制转二进制_百度百科 (baidu.com)