浮点数的转换--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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【技术分享】单网口远程透传网关快速实现昆仑通态触摸屏程序远程上下载及监控

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条&#xff0c;用于实现网络连接和连接触摸屏一台昆仑通态触摸屏及其编程软件一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡&#xff0c;WIFI联网则将WIFI天线插入USB口&#xff0…

python的import功能,你需要了解的导入机制

1 基本概念 概念 解释 import 即导入&#xff0c;方式就是在import位置将代码文件拷贝过去。 模块&#xff08;module&#xff09; python中一个.py文件定义为一个模块 常用的几种模块导入方式&#xff1a; import module_nameimport module_name.function_nameimport mod…

AI Earth平台简介

AI Earth地球科学云平台由达摩院-视觉技术实验室打造&#xff0c;基于地球科学智能计算分析方面的创新研究&#xff0c;致力于解决地球科学领域基础性、前沿性、业务性问题&#xff0c;目标成为国内一流的地球科学云计算平台。&#xff08;摘自官网&#xff09; 下面&#xff…

C++11(上):新特性讲解

C11新特性讲解 前言1.列表初始化1.1{ }初始化1.2std::initializer_list 2.类型推导2.1 auto2.2 typeid2.3 decltype 3.范围for4.STL的变化4.1新容器4.2容器的新方法 5.右值引用和移动语义5.1 左值引用和右值引用5.2 左值引用与右值引用比较5.3 右值引用的使用场景5.4 右值、左值…

华清远见嵌入式学习——ARM——作业3

作业要求&#xff1a; 代码效果图&#xff1a; 代码&#xff1a; led.h #ifndef __LED_H__ #define __LED_H__#define RCC_GPIO (*(unsigned int *)0x50000a28) #define GPIOE_MODER (*(unsigned int *)0x50006000) #define GPIOF_MODER (*(unsigned int *)0x50007000) #defi…

vue3使用i18n 实现国际化

目录 一、需求 二、实现原理 三、实现步骤 1.安装依赖 vue-i18n 2.配置语言包 3.如何使用 模板中使用 ts动态t函数使用 4.如何切换语言 一、需求 博主最近重构了自己的单页面SSR博客&#xff0c;打算添加国际化功能&#xff0c;众所周知&#xff0c;实现国际化已是一…

Typora图床搭建PicGo+阿里云OSS(免费白嫖)

文章目录 1. 目的2. 方案2.1 Typora2.2 PicGo2.3 阿里云OSS 3. 开始配置3.1 获取KeyId和KeySecret3.2 创建Bucket3.3 配置PicGo3.4 配置Typora 4. 成功结束 1. 目的 本地使用Typora编写markdown文档的时候&#xff0c;文档中的图片路径是本地的。这个时候如果需要将该markdown…

将特定目录添加到 Python 搜索路径

将特定目录添加到 Python 搜索路径 最近在使用青云1000(昇腾310)时&#xff0c;有很多华为提供的第三方库&#xff0c;不是通过pip安装的那些&#xff0c;在使用时不能直接import直接使用&#xff0c;简而言之就是python找不到这些库&#xff0c;下面提供三种措施 1. 使用 sy…

notepad++打开大文件失败问题

问题 :::warning 打开300多兆的日志文件提示文件太大打不开,但是其他版本的能打开 ::: 解决 换版本,没有好办法,换个版本就可以了

JavaWeb后门(webshell)基础

0x00 基础 JSP JSP全称为JavaServer Pages&#xff0c;是一种用于开发支持动态内容的Web页面的技术。它有助于开发人员通过使用特殊的JSP标记在HTML页面中插入Java代码&#xff0c;其中大多数以<&#xff05;开头&#xff0c;以&#xff05;>结尾。Java是一种通用的计算…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…

如何将本地websocket发布至公网并实现远程访问服务端

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…