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.001110100001110010111100100.001110100001110010111100100.00111010000111001011
化成规范化数为1.10010000111010000111001011∗261.10010000111010000111001011*2^61.10010000111010000111001011∗26
Sign:
1
exponent:
由于最高阶为6,则阶码为6+127=133,二进制形式为100001011000010110000101
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