浮点数在计算机中二进制表示

2019-03-08 22:00:00
赵勤松
原创
2720
摘要:对于整数在计算机中的表现形式,大家都比较熟悉,但我们也会接触到小数的保存和运算,也就是浮点数,尤其是在科学运算中,今天我们简单介绍一下计算机中如何使用二进制来表示一个浮点数。

目前的计算机系统,都支持IEEE754,其定义了单精度和双精度浮点数的表示标准

1.单精度浮点数

2.双精度浮点数

其中的s,占了一位,为0表示正,为1表示负,决定了浮点数的正负

exp,在单精度中占8位,在双精度中占11位,决定了浮点数的指数位移,这个在之后详细说明

frac,在单精度中占23位,在双精度中占52位,决定了浮点数的有效数值


下面举例说明一个浮点数,是怎样表示为一个符合IEEE754标准的二进制数值的。

以数值38.38为例,我们分别对整数部分和小数部分进行转换

1.整数部分按照除2法进行转换,即将当前整数不断除2,将所得的余数进行逆序排列即可

因此,整数部分的二进制表示为100110.

2.小数部分按照乘2法进行转换,即将当前小数乘以2,将所得乘积的个位数进行顺序排列即可(下次运算时取乘积的小数部分)

因此 ,小数部分的二进制可表示为01100001010001111010111.

由此可以将浮点数38.38表示为 100110. 01100001010001111010111.

3.将浮点数进行移位,获得1.xxx这样形式的数值,38.38需要向左移5位,即可表示为 1.00110 01100001010001111010111,这样所有的浮点数都可以统一为整数部分为1的二进制数,因为默认个位数为1,所以只需要将小数部分视为浮点数的有效数值(需要去掉后5位,只需要23位),即frac

4.相信大家可以看出来了,exp部分就是用来记录移位数据的,考虑到我们需要表示很小的数值,exp的最高位为0,其他位为1时,表示不需要移位,以单精度浮点数来说,exp=01111111=127,也就是说,如果exp=127,表示的浮点数为1.xxxx,如果是128,则为1x.xxx,如果是126,则为0.1xxxx,因此我们可以获得,38.38的exp数为127+5=132=10000100.

综上所述,38.38这个浮点数,s=0,exp=10000100,frac= 00110 011000010100011110),所以其二进制数,可完整表示为

01000010000110011000010100011110.


另外,还有一些数,是需要特别规定的.

当exp全为0,frac全为0时,表示0.

当exp全为0,frac不全为0时,表示非标准化值,此时的前导数不为1,而是0,因此可以表示更小的数值.

当exp全为1,frac全为0时,表示无穷大,s=0表示正无穷大,s=1表示负无穷大.

当exp全为1,frac不全为0时,表示NaN,不是合法实数或未初始化.

最后编辑:powereye 于 2019-03-08 14:24:22

关键字

文章分类
联系我们
联系人: powereye
Email: zqs@someapp.cn
QQ: 1134846
微信: powereye