title: 浮点数的表示方法
date: 2023-09-19 17:50:49
tags: Computer science
浮点的表示方式
浮点的表示方法我在我前面发布的《计算机工作原理》中简单说明了,这里我们详细讲一下它的单精度(float)和双精度(double)表示方法。
单精度(float)
单精度浮点数拥有4个字节(byte),即32位的存储空间,其中1位用来存储符号,称为符号位(Sign),8位的阶码(exponent),23位的尾码(mantissa)。
数值范围:-3.4E38~3.4E38(E就是10)。
例如,求5.25在计算机中的存储表示。、
整数部分:5/2=2…1
2/2=1…0
1/2=0…1
so整数部分101
小数部分:0.25*2=0.5
0.5*2=1
so小数部分0.01
so5.25D=101.01B
101.01=1.0101*2^2
阶码的真值就是2+127=129=128+1(这样表示有好处)
尾码就是0101(隐藏整数部分,称为隐藏位)
双精度(double)
区别在于存储空间从4个字节变为了8个字节(64位)。包含符号位1位,阶码11位,尾数52位,数值范围也变大了:-2.23E308~1.79E308(E就是10)。
IEEE 754标准
float和double浮点是表示都遵从IEEE标准:
S(sign)+阶码(component,含阶符)+小数点位置+尾数(mantissa)
除了float和double还有一种临时实数类型浮点数:
符号位 | 阶码 | 尾数 | 总位数 | |
---|---|---|---|---|
短实数 | 1 | 8 | 23 | 32 |
长实数 | 1 | 11 | 52 | 64 |
临时实数 | 1 | 15 | 64 | 80 |
用S表示数符,E表示阶码,M表示尾数。
需要强调的是,阶码都用移码表示,所以阶码的真值都需要加上一个127(偏移量),不同精度的浮点数的偏移量不同(短实数是127,长实数是1023,临时实数是16383)。
取值范围取决于阶码,精度取决于尾数占的位数。
还是举之前的例子:5.25
前面得到了尾码M=0101
偏移量E = 2 + 127 =128 + 1 = 100001B
所以存储的二进制表示为:
01000010101000000…
每4个为一组,转换为16进制:
(4 2 A 00000)H
4是0100的十六进制表示,2是0010的十六进制表示,A是1010的十六进制表示,后面补位到8位。