当前位置: 首页 > news >正文

数据的表示和存储 第4讲 C语言中的浮点数的编码表示

作者简介:互联网行业 算法研发工程师

本文适合阅读者:对C语言浮点数有一些疑惑的同学~

C语言的基本数据类型中,除了整数之外,还包含浮点数。

浮点数在机器中是如何表示的呢?

科学计数法,我们比较熟悉,任何十进制的数,都可以表示为:一个小数✖10的多少次方。

尾数的小数点前面有一位有效数字【规格化的形式】。

10称为基,10上面的数称为指数。

同理,对于2进制数,也可以写成这种形式。

32位浮点数的表示形式是:

正负号【符号位】 ✖ 0.1xxxxx【尾数部分】 ✖ 2^E【指数部分/阶】

注意:

  1. 符号S是尾数的一部分,是尾数的符号;
  2. 阶码,指数部分对应的编码,用第1到第8位来表示,一共有8位,是用移码表示的,8位移码,它的偏置常数,通常是2的8-1次方,也就是2的7次方,也就是128。【注意,如果不考虑全1情况是特殊情况,偏置常数就是128。如果 考虑到全1情况是特殊情况,那么,偏置常数就是127【2的7次方-1】,并且,尾数部分的表示就是以1开头了,而不是以0开头【其实两种表示是一个意思】,下面还会讲到】
  3. 后面的23位(9~31)是尾数部分,23位表示了24位的尾数,为什么呢?这是因为规格化的尾数,小数点后面第一位总是1,而这个1我们不在32位的格式中表示。

最大的正数

在规定的格式中,最大的正数是多少?怎么计算呢?

方法1:

0.1(不明显表示)1111...1111【23位个1】✖ 2^(111...111)

用2进制表示就是:

0 1111 1111 111 1111 1111 1111 1111 1111

符号位 阶码(移码) 尾数

=1 * 0.1 1...11 * 2^1111 1111

分析过程:

最大正数= 尾数阶码转换为进制尾数∗2阶码转换为10进制


http://www.mrgr.cn/news/36620.html

相关文章:

  • 三大硬核方式揭秘:Java如何与底层硬件和工业设备轻松通信!
  • python 实现multilayer perceptron classifier多层感知器分类器算法
  • AI大模型全套学习资料
  • 安全开发指南
  • 桌面整理工具:电脑桌面如何不显示任何东西?一键整理!
  • golang qq邮件发送验证码
  • 24最新ComfyUI搭建使用教程
  • 一文详解大模型微调与小模型训练
  • ComfyUI 节点、插件的基本指南
  • 什么Python库处理大量数据比较快?
  • 如何构建鲁棒高性能 Prompt 的方法?
  • [极客大挑战 2019]RCE ME1
  • 区间估计通俗理解与理论推导
  • ES的自我保护机制,磁盘超过多少会进入只读模式,怎么解决
  • JS设计模式之桥接模式:搭建跨越维度的通路
  • trixbox call php发起电话呼叫
  • AI:颠覆式创新 vs. 持续性创新
  • 轻松上手MyBatis反向工程:从零到一的自动化代码生成
  • 利用探空站数据(怀俄明和IGRA)和ERA5计算ZTD、ZHD和ZWD
  • [遇到问题]Word 带花括号的多行公式显示不全/多行公式对不齐