2019-2020-1学期 20192428 第二周作业——十进制转换IEEE754标准的32浮点数的二进制格式

十进制转换二进制问题

2019-10-12 14:56:14 星期六

十进制向二进制的转换在python3语言中是一个附带的功能,如下代码所示。

# 获取用户输入十进制数
dec = int(input("输入数字:"))
 
print("十进制数为:", dec)
print("转换为二进制为:", bin(dec))
print("转换为八进制为:", oct(dec))
print("转换为十六进制为:", hex(dec))

于是抱着试试的心态,我尝试着自己在python3.7版本中进行编辑,成功写出了十进制转换为二进制的小程序,其中有所感悟,也有所收获,但不免也有一些疑惑问题,下面是我的编码

#2019/10/12 13:15
#十进制转换二进制问题
print('''--------------------------------------------------
作者:魏来
十进制转换IEEE754标准的32浮点数的二进制格式(伪)
--------------------------------------------------''')
a = 0
while a < 9999:
    a = a+1
    number = input('输入数字(输入quit退出程序):')
    if number in ['quit']:    #退出程序
        break
    else:
        number = float(number)
        list_int=[]
        list_float=[]
        int_ = int(number)
        float_ = number - int_

        while int_!= 0:    #当整数部分不为0时,执行循环
            list_int .append(int_%2)    #在list_int中排列整数部分的二进制
            int_ = int_//2    #除2取整
        else:
            list_int.append(0)
        list_int.reverse()    #反向list_int列表使整数部分二进制以正确形式所显示    	

        while float_ > 0.00001:
            list_float.append(int(float_*2))    #小数部分转化为二进制需除法计算
            float_ = float_ *2 - int(float_*2)
        else:
            list_float.append(0)    

        while len(list_float) > 32:    #限定float为32位
            list_float.pop()    #若溢出,则删除最后一位
        else:
            pass
        list_int.append(".")
        result = list_int + list_float
        for x in result:
            print(x,end="")
        print('''

--------------------------------------------------''')

在这段代码中,我借助了列表函数和方法,其中list_intlist_float分别代表了输入值的整数部分和小数部分。同时,根据十进制转换二进制中的基础方法,编辑出比特数的排列方式。其中整数部分的列表需要颠倒位置,因为整数部分的转换是从左向右的,需要颠倒;小数部分需要控制在32位以内;以及小数点;故我分别使用了下面三个指令:

list_int.reverse()
list_float.pop()
list_int.append(".")

同时我也发现了漏洞以及缺点:

  1. 无法计算负数的二进制,目前不知道怎样解决
  2. IEEE754标准的32浮点数的二进制格式要求中,小数部分为32位(已做到),整数部分要求8位(需要改进,借助list.append(0)即可做出),以及1位的符号位(需考虑)
  3. 尚存冗杂代码
下面是运行实际效果:



原文地址:https://www.cnblogs.com/KamanFuture/p/11661736.html