zoukankan      html  css  js  c++  java
  • Int&Float转换

      前几天一个朋友问我Int转float的问题:int a = 0x7fffffff ; int b = 0x7ffffff0; 将a,b分别赋给double 类型的 c,d 然后发现c==d居然是true.

    这对于初学者当然有疑问,明明十六进制表示的a(0x7fffffff),b(0x7ffffff0)换成十进制分别是2147483647和2147483632,为什么转换后都是2.14748365E9呢?

      大家都知道,int 和float类型一样都是4个字节,即32位,但是不同的是int32位分为:符号位(1bit),数值位(31bit);float的32位分为:符号位(1bit),幂指数位(8bit),和尾数(23bit)。

    我们将a,b的二进制形式输出:

    a:1111111111111111111111111111111

    b:1111111111111111111111111110000

    可以看到前面基本上都一样,就后四位不同。

    我们再把a,b换成float类型后的二进制形式输出

    a:1001111000000000000000000000000

    b:1001111000000000000000000000000

    两者是相同的,都是 2.14748365E9

    问题就出现在这里,float最多只能精确到23位,a,b前23位是一样的,这就是相同的原因,float的精度一直是个问题。

  • 相关阅读:
    你所不知道的setTimeout
    SecureCRT8.1下载+注册机+破解教程
    jQuery学习
    GIt学习
    多进程
    Linux下的压缩(zip)解压(unzip)缩命令
    三次握手四次挥手
    django常见问题
    form和modelform
    文件上传
  • 原文地址:https://www.cnblogs.com/tzhz/p/3451648.html
Copyright © 2011-2022 走看看