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. 尚存冗杂代码
    下面是运行实际效果:



  • 相关阅读:
    JAVA联调接口跨域解决办法
    Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
    Quartz集成springMVC 的方案一
    Java 常调用的Webservice接口的方法
    集成Dubbo服务(Spring)
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    事务的隔离级别 数据库
    Spring 之注解事务 @Transactional
    Request To JavaBean(请求对象转换为JavaBean对象)
    springmvc+mongodb+maven 项目搭建配置
  • 原文地址:https://www.cnblogs.com/KamanFuture/p/11661736.html
Copyright © 2011-2022 走看看