float 表示单精度浮点数类型,在16位、32位以及64位系统下都占用四个字节(Byte)。参考图1.4-1 单精度浮点数结构表,我们来分析实数的计算方式:
bit(位) 31bit (23-30)bit (0-22)bit
数据描述 符号域 指数域 尾数域
尾数域:
数据范围0—22bit,共23位(bit),用来表示实数转换为二进制数字的部分,当转换后的二进制数字不足23位时,采用低位补0对齐。下面举个例子,实数5.25:
整数部分 :直接采用二进制转换得到 101;
小数部分 :采用“乘2取整”运算,如果结果大于等于1取二进制数字1,否则取二进制数字0,然后用得到的结果小数部分继续运算,一直到小数部分为0或尾数域足够23位:
0.25 2 = 0.5,取0;
0.5 2 = 1,取1;
小数部分得到 01,整数和小数部分组合为 101.01;
二进制科学表达式 :规范要求浮点数的小数点左侧必须为1,我们采用小数点左移得到1.0101,这个示例中我们左移了两位,表示为 1.0101 * 2^2;
尾数域完整数据 :尾数数据储存时,应省略小数点前面的1,这么做是为了省出一位二进制数字,用来存储更多的数据,按左高位右低位表示为 010 1000 0000 0000 0000。
指数域:
指数域由8位介码(E)采用移码方式来表示正负指数,数据范围23—30bit,共8位(bit),介码有效范围为1—254,偏移量为127,介码(E) = 127 + 元数据⑵。示例中,指数域计算方式:
实数5.25计算尾数域时,小数点左移了两位,所以我们的元数据为2,然后通过127 + 2 得到介码129,二进制数字表示为 1000 0001。
(2) :指数(e)的最高位为符号位,其余位为数据位,可表达有效范围为-126—127,指数(e) = 介码(E) – 127。
