十进制数转IEE754单精度浮点数

理解题目

单精度浮点数:单精度浮点数是用来表示带有小数部分的实数,一般用于科学计算。占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。

具体规则及例子

规则参照链接https://zhidao.baidu.com/question/457693134.html

较详细讲解了单精度浮点数向十进制的转化,倒着看即可理解十进制转浮点数

5.75→01000000101110000000000000000000

161.875→01000011001000011110000000000000

-0.0234375→10111100110000000000000000000000

python语句实现

def ConvertFixedIntegerToComplement(fixedInterger) :#浮点数整数部分转换成补码(整数全部为正)

return bin(fixedInterger)[2:]

def ConvertFixedDecimalToComplement(fixedDecimal) :#浮点数小数部分转换成补码

fixedpoint = int(fixedDecimal) / (10.0**len(fixedDecimal))

s = ''

while fixedDecimal != 1.0 and len(s) < 23 :

fixedpoint = fixedpoint * 2.0

s += str(fixedpoint)[0]

fixedpoint = fixedpoint if str(fixedpoint)[0] == '0' else fixedpoint - 1.0

return s

def ConvertToExponentMarker(number) : #阶码生成

return bin(number + 127)[2:].zfill(8)

def ConvertToFloat(floatingPoint) :#转换成IEEE754标准的数

floatingPointString = str(floatingPoint)

if floatingPointString.find('-') != -1 :#判断符号位

sign = '1'

floatingPointString = floatingPointString[1:]

else :

sign = '0'

l = floatingPointString.split('.')#将整数和小数分离

front = ConvertFixedIntegerToComplement(int(l[0]))#返回整数补码

rear = ConvertFixedDecimalToComplement(l[1])#返回小数补码

floatingPointString = front + '.' + rear #整合

relativePos = floatingPointString.find('.') - floatingPointString.find('1')#获得字符1的开始位置

if relativePos > 0 :#若小数点在第一个1之后

exponet = ConvertToExponentMarker(relativePos-1)#获得阶码

mantissa = floatingPointString[floatingPointString.find('1')+1 : floatingPointString.find('.')] + floatingPointString[floatingPointString.find('.') + 1 :] # 获得尾数

else :

exponet = ConvertToExponentMarker(relativePos)#获得阶码

mantissa = floatingPointString[floatingPointString.find('1') + 1: ] # 获得尾数

mantissa = mantissa[:23] + '0' * (23 - len(mantissa))

floatingPointString = '0b' + sign + exponet + mantissa

print(floatingPointString)

return hex( int( floatingPointString , 2 ) )

print(ConvertToFloat(-5.56))

或有代码如https://www.cnblogs.com/saberwc/p/13833545.html

十进制数转IEE754单精度浮点数以及浮点数转换的python实现的更多相关文章

  1. 算法笔记_161:算法提高 十进制数转八进制数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. 样例输入 9274 样 ...

  2. Java实现算法提高十进制数转八进制数

    算法提高 十进制数转八进制数 时间限制:1.0s 内存限制:512.0MB 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. ...

  3. 将十进制数转为一个n位数的密码(每位都是个m进制数)

    例如一个6位数的10进制密码,共有106个密码,如果把每个6位数的密码编成号就是[0,106-1].这是十进制的情况,即6个位,每个位有10种选择.如果要遍历所有密码,需要6重for循环,每个循环10 ...

  4. 实验10.3_数值显示拓展_dword型数转变为表示十进制数的字符串

    assume cs:code data segment db 10 dup (0) data ends code segment start : mov ax,4240H;F4240H=1000000 ...

  5. 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。

    编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列. 实现了unsigned long型的转换. // 十进制转换为二进制,十进制数的每1bit转换为二进制的1 ...

  6. 剑指offer—第三章高质量的代码(按顺序打印从1到n位十进制数)

    题目:输入一个数字n,按照顺序打印出1到最大n位十进制数,比如输入3,则打印出1,2,3直到最大的3位数999为止. 本题陷阱:没有考虑到大数的问题. 本题解题思路:将要打印的数字,看成字符串,不足位 ...

  7. java_十进制数转换为二进制,八进制,十六进制数的算法

    java_十进制数转换为二进制,八进制,十六进制数的算法 java Ê®½øÖÆÊýת»»Îª¶þ½øÖÆ,°Ë½øÖÆ,Ê®Áù½øÖÆÊýµÄË㕨 using System; using S ...

  8. 打印出从1到最大的n位十进制数

    首先这一题会溢出,要考虑的大数问题.所以不能用简单的是int类型数来表示(32位无符号int 范围是0x00000000···0xFFFFFFFF),下面主要是非递归的实现代码,自己做了注释方便以后回 ...

  9. 打印十进制数n 递归

    #include<stdio.h> //printd函数: 打印十进制数n void printd(int n){ ){ putchar('-'); n=-n; } ) printd(n/ ...

随机推荐

  1. 掌握这些常用Linux命令,一起提升工作效率

    开始上班了,新一年的奋斗的之路启程了,要继续[奔赴山海,奔赴热爱]. 汪国真在<热爱生命>这首诗中写到:既然选择了远方,便只顾风雨兼程.技术上还是持续精进和学习,远方虽远,要迈开脚步,一步 ...

  2. Hive安装教程

    Hive的安装和使用 我的版本: JAVA_HOME=/usr/local/soft/jdk1.8.0_171 HADOOP_HOME=/usr/local/soft/hadoop-2.7.6 HIV ...

  3. Entity Framework 在OrderBy排序中使用字符串

    public static class LinqExtensions { private static PropertyInfo GetPropertyInfo(Type objType, strin ...

  4. Linux下Mysql端口修改及防火墙开端口

    用户权限问题:https://blog.csdn.net/weixin_43670802/article/details/103019598 Linux下修改Mysql默认的3306端口 如下: 1. ...

  5. java篇之JDBC原理和使用方法

    JDBC学过但又属于很容易忘记的那种,每次要用到,都要看下连接模式.每次找又很费时间,总之好麻烦呀呀呀,所以写篇博客,总结下原理和常用接口,要是又忘了可以直接来博客上看,嘿嘿. 一.什么是JDBC 1 ...

  6. WebLogic11g- 集群化

    其实网上关于weblogic集群的资料非常多[大部分都是从创建新的domain开始,我这篇先介绍怎么样把原本普通的domain改造为集群环境],如果觉得不够,可以啃weblogic的官方文档.下面给几 ...

  7. MySQL中 BETWEEN ... AND ...

    MySQL中 BETWEEN ... AND ... 1. 准备测试数据 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...

  8. [GWCTF 2019]babyvm re

    BABYVM 基于虚拟机操作的一个题 明面上的check函数和加密逻辑都是假的 操作码 重点分析这个vm 0xF5, 0xF1, 0xE1, 0x00, 0x00, 0x00, 0x00, 0xF2, ...

  9. 如何写出优雅又地道的Python代码?【转载】

    在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic.一般说地道(idiomatic)的python代码,就是指这份代码很pyth ...

  10. Solution -「CTSC 2018」「洛谷 P4602」混合果汁

    \(\mathcal{Description}\)   Link.   \(n\) 种果汁,第 \(i\) 种美味度为 \(d_i\),每升价格 \(p_i\),一共 \(l_i\) 升.\(m\) ...