zoukankan      html  css  js  c++  java
  • 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. 尚存冗杂代码
    下面是运行实际效果:



  • 相关阅读:
    原生JS之温故而知新(一)
    jQuery版本问题
    AngularJs我的学习整理(不定时修改)
    Js事件处理程序跨浏览器
    AngularJs的关于路由问题
    很棒的十句话,分享给大家。
    一个人为什么要努力?
    春熙路。
    成都
    springboot 使用mybatis-generator自动生成代码
  • 原文地址:https://www.cnblogs.com/KamanFuture/p/11661736.html
Copyright © 2011-2022 走看看