计算机进行小数处理的机制
用二进制数表示小数
把二进制数 1011.0011 转换成十进制数

计算机进行小数运算时会出错
有一些十进制数的小数无法转换成二级制数,比如循环小数。
编程语言提供两种表示小数的数据类型:双精度浮点数类型-double(64位)、单精度浮点数类型-float(32位)。
- 浮点数,用符号、尾数、基数和指数这四部分来表示的小数。
- 计算机内部使用的是二进制数,所以基数为 2。
- 64位和32位的数据,会被分为3部分来使用。


- 数值的大小用尾数部分和指数部分来表示。
- 小数用“尾数部分*2的指数部分次幂”的形式来表示。
符号部分,指使用一个数据来表示数值的符号。
- 该数据位是1时表示负,为0时则表示“正或者0”。
尾数部分,将小数点前面的值固定为1的正则表达式
- 尾数部分使用正则表达式,将表现形式多样的浮点数统一为一种表现形式。

- 将二进制数表示的小数左移或右移(逻辑移位)数次后,整数部分的第1位变为1,第2位之后都变为0(这样是为了消除第2位以上的数位)。
- 第1位的1在实际数据中不保存。省略该部分后就节省了一个数据位,可表示更多的数据范围。
- 单精度浮点数中,尾数部分是23位,但可表示24位的数值。
- 双精度浮点数中,尾数部分是52位,但可表示53位的数值。

指数部分,EXCESS系统表现
- 为了表示负数时不使用符号位。
- EXCESS系统表现,通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示。

在实际的程序中进行确认


十进制数0.75,用单精度浮点数表示为:
0-01111110-100000000000000000000000
破折号用来区分符号部分、指数部分、尾数部分。
- 0,表示正数;
- 01111110,是十进制数126,用EXCESS系统表现就是-1;
尾数部分的二进制数转换成十进制数,为:
(12的0次幂)+(12的-1次幂)=1.5
这个单精度浮点数,表示为:“ +1.52的-1次幂 ”。即为“ +1.50.5= +0.75 ”
