浮点数的二进制表示(IEEE 754标准)

2023-05-16

浮点数是我们在程序里常用的数据类型,它在内存中到底是怎么样的形式存在,是我了解之前是觉得好神奇,以此记录,作为学习笔记。

现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:

对于不同长度的浮点数,阶码与小数位分配的数量不一样,如下:

对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位。

 

根据这个标准,我们来尝试把一个十进制的浮点数转换为IEEE754标准表示。

例如:178.125

 

  1. 先把浮点数分别把整数部分和小数部分转换成2进制
    1. 整数部分用除2取余的方法,求得:10110010
    2. 小数部分用乘2取整的方法,求得:001
    3. 合起来即是:10110010.001
    4. 转换成二进制的浮点数,即把小数点移动到整数位只有1,即为:1.0110010001 * 2^111,111是二进制,由于左移了7位,所以是111,阶数即为111。
  2. 把浮点数转换二进制后,这里基本已经可以得出对应3部分的值了
    1. 数符:由于浮点数是正数,故为0.(负数为1)
    2. 阶码 : 阶码的计算公式:阶数 + 偏移量。阶码是需要作移码运算,在转换出来的二进制数里,阶数是111(十进制为7),对于单精度的浮点数,偏移值为01111111(127)[偏移量的计算是:2^(e-1)-1, e为阶码的位数,即为8,因此偏移值是127],即:111+01111111 = 10000110
    3. 尾数:小数点后面的数,即0110010001
    4. 最终根据位置填到对位的位置上:

 

 

可能有个疑问:小数点前面的1去哪里了?由于尾数部分是规格化表示的,最高位总是“1”,所以这是直接隐藏掉,同时也节省了1个位出来存储小数,提高精度

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮点数的二进制表示(IEEE 754标准) 的相关文章

随机推荐

  • Lambda表达式下访问外部变量

    lambda表达式无法访问外部变量 xff1a 原因 xff1a lambda表达式访问外部变量做了一个非常重要的限制 外部变量不可变 所以 xff0c 我们可以采用final对外部变量进行修饰
  • vscode安装问题:安装程序无法创建目录,错误5:拒绝访问,这个问题怎没解决啊,谢谢

    我在实际安装过程中遇到的这个问题 xff0c 属于是权限不足引起 xff0c 解决方法 xff1a 单击右键 xff0c 选择管理者方式运行 exe文件即可
  • 创建springboot失败问题,我这个问题比较特殊,并不是采用默认的创建方式,而是使用阿里云镜像创建时失败。

    解决方法 xff1a 使用https start springboot io替代我原先自定义的阿里云镜像 xff0c 这个服务器架设在中国香港 xff0c 大陆访问非常稳定 xff0c 项目创建成功率很高 成功 xff1a 具体参考这个大佬
  • echarts基本使用(入门)

    echarts基本使用 1 在项目中安装echarts npm install echarts span class token operator span save 2 在项目中引入echarts span class token key
  • AdGuard Home 安装使用教程

    原文链接 xff1a 使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时 xff0c 宽带运营商会为我们分配一个 DNS 服务器 这个 DNS 通常是最快的 xff0c 距离最近的服务器 xff0c 但会有很
  • 信号量和互斥量(锁)的区别

    信号量 xff1a 那是多线程同步用的 xff0c 一个线程完成了某一个动作就通过信号告诉别的线程 xff0c 别的线程再进行某些动作 互斥量 xff1a 这是多线程互斥用的 xff0c 比如说 xff0c 一个线程占用了某一个资源 xff
  • C++的struct和class的区别

    目录 1 C 43 43 的struct和class的区别1 1 成员访问范围的差异1 struct2 class 1 1 继承关系访问范围的差异1 struct struct2 struct class3 struct private c
  • Android 8.0 以后前台服务的启动方式

    前言 在官方文档 Android 8 0之后的行为变更 中有这样一段话 xff1a Android 8 0 有一项复杂功能 xff1b 系统不允许后台应用创建后台服务 因此 xff0c Android 8 0 引入了一种全新的方法 xff0
  • PID控制算法的c语言实现 附录2 直流电机PWM调速系统中控制电压非线性研究

    附录2 直流电机PWM调速系统中控制电压非线性研究 引言 由于线性放大驱动方式效率和散热问题严重 xff0c 目前绝大多数直流电动机采用开关驱动方式 开关驱动方式是半导体功率器件工作在开关状态 xff0c 通过脉宽调制PWM控制电动机电枢电
  • Android中dispatchDraw分析

    Android中dispatchDraw分析 View中 xff1a public void draw Canvas canvas 1 Draw the background 绘制背景 2 If necessary save the can
  • CMake命令之execute_process

    用途 xff1a 执行一个或多个子进程 execute process COMMAND lt cmd1 gt args1 COMMAND lt cmd2 gt args2 WORKING DIRECTORY lt directory gt
  • 利用反射 Mirror 快速的获取/打印枚举值

    在 Swift 中 xff0c 枚举是一等类型 xff0c 可以给其添加计算属性 xff0c 实例方法 xff0c 构造函数 xff0c 遵循协议 xff0c 另外 xff0c 还可以定义枚举来存储任意类型的关联值 这些特性可以让枚举适用于
  • linux 应用层编程之内核链表list的使用

    linux内核提供了一个经典通用的双向循环链表list的实现 xff0c 任何模块都可以借助该接口实现自己的内部循环链表 因为是通用的 xff0c 可以直接移植到用户态中使用 xff0c 下面介绍相关的接口与一个简单操作例子 xff0c 包
  • EFR32修改开发板VCOM串口波特率的方法

    Silabs官方开发板上的Jlink CDC串口 xff08 VCOM xff09 默认的波特率是115200 xff0c 在普通的终端软件 xff08 如 串口调试助手 xff09 里设置别的波特率是不起作用的 要让它支持其他的波特率 x
  • 用 Latex 生成英文论文中的 算法步骤/伪代码 并插入 word 中

    准备工作 xff1a 1 先安装 CTEX https mirrors tuna tsinghua edu cn ctex legacy 2 9 2 下载 algorithm2e 包 xff08 里面有详细的使用说明文档 xff09 htt
  • Docker 大势已去,Podman 万岁

    前言 郑重声明 xff1a 本文不是 Podman 的入门篇 xff0c 入门请阅读这篇文章 xff1a 再见 Docker xff0c 是时候拥抱下一代容器工具了 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一
  • 生产者消费者问题--练习题目

    10 os考研题目 改题目中p0 xff0c p1两个进程可以互斥的进入临界区 xff0c 会出现饥饿现象 xff08 答案给的是D xff0c 但是自我认为可以出现饥饿现象 xff09 互斥的访问 xff1a p0 Flag 0 61 T
  • PromQL的简单使用

    PromQL的简单使用 一 背景二 PromQL的数据类型三 字面量1 字符串字面量2 浮点数字面量 四 时间序列选择器1 即时向量选择器1 组成部分2 指标名称和匹配器的组合3 匹配器 2 区间向量选择器1 时间格式 3 偏移量修改器 五
  • 一步一步在平衡车上实现卡尔曼滤波

    这是一个翻译版本 xff0c 其中的一些公式 xff0c 符号太多 xff0c 我就不一个一个去上传 xff0c 大家可以参考下面网址去对照着看 A practical approach to Kalman filter and how t
  • 浮点数的二进制表示(IEEE 754标准)

    浮点数是我们在程序里常用的数据类型 xff0c 它在内存中到底是怎么样的形式存在 xff0c 是我了解之前是觉得好神奇 xff0c 以此记录 xff0c 作为学习笔记 现代计算机中 xff0c 一般都以IEEE 754标准存储浮点数 xff