关于float类型能表示的最大值与精度问题
float类型能表达的最大值为 (2-2^(-23))2^(127)即为340282346638528860000000000000000000000
通过下面这段代码也能得到这个数
#include<stdio.h>
int main(int argc, char* argv[])
{
float a=-8.25;
char *p=(char*)&a;
*p=0xff;
*(p+1)=0xff;
*(p+2)=0x7f;
*(p+3)=0x7f;
printf(" &a=%x",&a);
printf(" a=%f",a);
}
但是直接将这个数赋给一个float类型变量再打印出来的结果却是不一样的
(将这个数转化为二进制得到11111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
有24个1和104个0共128位即1.11111111111111111111111*2^127
尾数部分应该是没有超出存储限制的
那么为什么会不一样呢?
首先,你最基本的概念就错了.
float是8个字节,也就是64位而非你认为的128位的(这个是double的范围)
而你程序中的指针p只用了4*8=32位
且内容也是错的,你的p的最终为
ff ff 7f 7f
对应的二进制为
11111111 11111111 01111111 01111111
完全不对啊
你自己细细看下
并参考下IEEE754资料吧
(float最大为 3.40X10^38,你的第一个还多了一位)
下一篇:荒野行动电脑版键位会更换吗?
上一篇:YUNOS可以适配荣耀6P吗