浮点数的转换--IEEE 754

2023-12-25 19:44
文章标签 浮点数 转换 ieee 754

本文主要是介绍浮点数的转换--IEEE 754,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IEEE754标准是一种浮点数表示标准,一般分为

  • 单精度(32位的二进制数);
  • 双精度(64位的二进制数)

根据国际标准IEEE754,任意一个二进制浮点数V可以表示为下面形式:

  • V = (-1)^s *(1+M)* 2^(E-127)(单精度)
  • V = (-1)^s *(1+M)* 2^(E-1023)(双精度)

其中,E为阶码位,M为尾数部分,S为符号位;

  • M: 1<=M<2, 即M写成1.xxxxx形式;
    • EEE 754规定,计算机内部保存M它的第一位总是1,因此可以只保存后面的xxxxxx部分。如1.001时,尾数001,需要读取时,再把第一位的1加上去。这样做可以节省1位有效数字;
  • E:无符号整数,如果E为8位,其取值范围为0~255;若E为11位,取值范围为0~2047
    • 科学计数法中,E可以是负数,因此,IEEE 754规定,E的真实值必须再减去一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023;
    • e.g. 2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。
    • 特殊处理:
      • E不全为0或1时,浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1;
      • E全为0时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字;即:V = (-1)^s *(M)* 2^(1-127)
      • E全为1时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)

下面以32bits的浮点数为例子:

将十进制数0.15625转换为浮点数:

1. 将对应数据逐步乘以2,取整数部分;
        ⭘0.15625x2=0.3125 取整0 
        ⭘0.31250x2=0.6250 取整0
        ⭘0.62500x2=1.2500 取整1
        ⭘0.25000x2=0.5000 取整0
        ⭘0.50000x2=1.0000 取整1
2. 将整数部分进行组合,得到0.00101;
3. 将得到的数,表示成IEEE 754的格式,0.00101=1.01*2-3
4. 将该数据,与公式进行对比,可以得出:1.01*2**-3 = (-1)s  * (1+M)*2**(E-127), 可以得出:
        ⭘s=0;
        ⭘1+M=1.01, M=0.01;
        ⭘E-127=-3, E=124; 124 = BIN 0111 1100
5. 将上述的值,填入到32bits的范围内,可得:

使用上面的方式,转换十进制数-0.0625:

 DEC -0.0625 = BIN -0.0001 = -1.0*2-4 s=1,M=1-1=0,E=-4 +127=123=0111 1011

使用上面的方式,转换十进制数127.1247:

这个数可能在32bits范围内,不能准确的表示出来,因此需要进行截位;

按照上面的公式,整数部分,127: 0111_1111;

小数部分:0.1247,不断乘以2,取整数部分,00011111111011001..., 因为位数不够,进行截断;

转换成上面的公式可以得到:M=1.11111100011111111011001,E=127+6=133, 所以转换后的浮点数为:

附上IEEE 754在线转换工具:

 IEEE 754 浮点数 - 在线工具 (toolhelper.cn)

这篇关于浮点数的转换--IEEE 754的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536714

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程