float的存储

参考资料:

https://windliang.wang/2019/07/25/%E4%B8%80%E7%9B%B4%E8%BF%B7%E7%B3%8A%E7%9A%84%E6%B5%AE%E7%82%B9%E6%95%B0/,思路三

  • 尾数部分 使用二进制数来表示此浮点数的实际值。尾数部分实际是占用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也可以。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值