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的精度一直是个问题。

原文地址:https://www.cnblogs.com/tzhz/p/3451648.html