浮点数在计算机中是如何用二进制表示的

各种整型类型对大多数软件开发项目而言够用了。然而,面向金融和数学的程序经常使用 浮点数。C语言中的浮点数有float、double和long double类型。

数据类型的字节数和取值范围.png

1.从科学计数法理解浮点数的表示

首先,我们从科学计数法来理解浮点数。

普通计数法:+302657264526
科学计数法:

我们再把科学计数法换一种表达方式:

上式中有四个部分:

阶符 阶码的数值部分 数符 尾数的数值部分

阶符和阶码的数值部分统称阶码,数符和尾数的数值部分统称尾数。

所以我们参考科学计数法,将浮点数表示为:

式中,r是浮点数阶码的底,即科学计数法中的10,但其实这个底不一定非要为10,可以是100、1000或者4和8,若将浮点数用二进制,则r=2。E为阶码,M为尾数。所以在计算机中,将r默认设置为2,再通过存储E和M的二进制,就可以表示出一个浮点数了。

+11 +3.026
阶码反映数值大小 尾数反映精度

在这里,相较于,科学计数法中,省略了一部分尾数,这就对应了C语言里可能出现的浮点数舍入错误。因为尾数的位数n反应浮点数的精度。通常float类型要占用32位(即4个字节),其中8位用于表示阶码,剩下24位用于表示尾数。有限的24位只能表示有限位数的有效数字。 = 16777216,共有8个十进制位数,所以,foalt类型能够表示的有效位数通常是7位或8位。

2.浮点数的表示

计算机中是如何用二进制将上述的阶码与尾数组织存储起来的呢?有一个IEEE 754标准,C语言采用了IEEE 754标准来表示浮点数。

以十进制数为例,若将转换为float类型,该标准规定格式如下:

尾数部分,用原码表示
E M
1 01111110 10000000000000000000000
数符(1位) 阶码部分,用移码(8位) 尾数数值位(23位)

IEEE 754标准规定常用的浮点数格式有短浮点数(单精度、float)、长浮点数(双精度、double)、临时浮点数(long double),如下表所示。

IEEE 754.png

你可能感兴趣的:(浮点数在计算机中是如何用二进制表示的)