参考资料:
- 尾数部分 使用二进制数来表示此浮点数的实际值。尾数部分实际是占用24-bit的一个值,由于其最高位始终是1 ,所以最高位省去不存储,23-bit的位置实际表示了24-bit的二进制数字。
- 指数部分 占用8-bit的二进制数,可表示数值范围为0-255。 但是指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -127到127(阶码不能达到1111 1111,IEEE规定,当编译器遇到阶码为0XFF时,即调用溢出指令)。
- 符号位 用来指示浮点数的正负,当符号位是1时,为负数,符号位是0时,为正数。
float数据在内存中的表示
现在来计算float类型数据表示的最大值。
符号位 0 (代表正数)
指数位 1111 1110 (十进制值为254,代表阶码127)
尾数为 1111 1111 1111 1111 1111 111(转换后的尾数位1.11111111111111111111111)
实际代表的值 = + 转换后的尾数位 右移 阶码位
即1.11111111111111111111111右移128位 这个值为
340282346638528859811704183484516925440
或约为3.4028235E+38
面试的时候,证明判断一个double是不是小数0?
bool equal(double num1, num2)
{
if (num1 - num2 > -0.0000001 && num1 - nums2 < 0.0000001)
return true;
else
return false;
}
至于为什么是0.0000001呢?
其实0.000001也可以。。。