1,在C语言家族的编程语言中,常用到的是单精度浮点数(single precision)和双精度浮点数(double precision)。它们的 表示方法如下:
Sign:0代表正数,1代表负数(no surprise)
Exponent:8位的二进制数值,可以表示0~255范围的256个数,。。。等等。。。进行幂的计算时是有正有负的,不需要as before留出第一位作为符号位吗?
由于sign已经是符号位了,在阶码中再弄一个符号位会导致补码功能失效(为啥?有待下次探究)。
这里使exponent有正有负的操作是减去127,所以它的范围是-127到128。
Mantissa:尾数,相当于十进制科学计数法中小数点后面的数,具体使用时是(1+Mantissa)
2,例子
2.1 十进制化成二进制浮点数:
(
100.227
)
10
(100.227)_{10}
(100.227)10
用二进制表示出来为
1100100.00111010000111001011
1100100.00111010000111001011
1100100.00111010000111001011
化成规范化数为
1.10010000111010000111001011
∗
2
6
1.10010000111010000111001011*2^6
1.10010000111010000111001011∗26
Sign:
1
exponent:
由于最高阶为6,则阶码为6+127=133,二进制形式为
10000101
10000101
10000101
Mantissa:
10010000111010000111001011 (尾数不够用了,去掉后面三位,使得总数为23位)。
综上,
(
100.227
)
10
(100.227)_{10}
(100.227)10在计算机中的存储形式为11000010110010000111010000111001(一共32字节)。
2.2 浮点数化成二进制数:
(
10111111010...0
)
2
(10111111010...0)_{2}
(10111111010...0)2,中间省略20个零。
拆解成三部分:
1:符号位,是个负数;
01111110:阶码位,126-127=-1
10…0:尾数
结果为
−
1.10...0
∗
2
−
1
=
(
−
0.75
)
10
-1.10...0*2^{-1}=(-0.75)_{10}
−1.10...0∗2−1=(−0.75)10