数据的表示和存储 第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进制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深耕AI

谢谢鼓励~我将继续创作优质博文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值