目录
一,浮点数的表示
1.目的
其实为了表示更大的数,前面是阶数,后面是实际的数,尾数是小数
看图中的方框内的表示,以及下面的解释
此外,对于右下角的例子,a可以用8位表示,b不可以,后面的1直接丢弃,影响精度
2.规格化
解决8位放不下的问题
(1)方式:
①尾数除去符号位的最高位是有效位(左归)(因为数字向左移动);阶码-1 最高位是有效位是指小数点后一位是1,
②小数点必须在第一个非0的右边;阶码+1(右归) 如果相加之后得到01这样的符号位,那么就应该右归
注意:是算术左移,看他的符号位
(2)例子:![](https://img-blog.csdnimg.cn/direct/ffef7fc7fb2c41c084c5870dd1065114.png)
(3)特点:
原码最高数值位=1;补码符号位和最高数值位相反;
例子:
将尾数算术左移3位
(4)溢出异常
二,IEEE_754
(1)移码的另一种定义:
就是说算移码还可以用真值+偏置值(偏置值是2^n-1)
移码很适合阶码,阶码只有整数
IEEE把127作为偏置值,因此得到的结果是
(2)标准
阶码是无符号的整数,没有符号位
(3)最值
(4)上溢&&下溢
①E全0还是-126,只是隐含最高位变成0了
三,浮点数的运算、
1.加减运算
注:对阶时候是转为高次方
规格化:最终结果就是小数点左边只有一位,并且这一位是有效位 而且这里是算数右移,一般出现这个就是符号位是10(我遇到的) 规格化别忘了阶码也要改变(+1)
舍入是指规格化之后,右移的时候去掉一个1,去掉0就不管
舍入
2.强制类型转换
下面图中:黑色都是无损转换
首先整形前三个都不用管,long→double:long如果是32位,double尾部53位,因此可以转换,但是64位机器就不行了
右侧不能转换的蓝色部分:int需要32位,float只有23位,因此肯定不够,但是float类型表示的范围更大,因此不会溢出,但转回来就会溢出
总结