浮点数以16进制打印解决方案
浮点数以16进制打印float valFLT_MAXDWORD val2(int)valprintf(0x%x,val2)结果为:0x80000000为什么
浮点数以16进制打印
float val=FLT_MAX;
DWORD val2=(int)val;
printf("0x%x",val2);
结果为:
0x80000000
为什么结果是这个啊?
#define FLT_MAX 3.402823466e+38F /* max value */
怎么计算的?
[解决办法]
你真搞笑,(int)val不是转换类型是什么?连作用都没搞清,自己就给这句代码规定了“将val中内容完整的拷贝到val2中”的功能?你既然知道这句的作用还来问什么
float的结构都没搞清就来“还是怎么地?”,先去看下float的存储方式吧
顺便如果你想复制内存,就老老实实用memcpy
[解决办法]float val=FLT_MAX;
DWORD val2=(int)val;
DWORD 无法表示FLT_MAX, 也就是说溢出了。
有些系统val2 = 0x80000000 (INT_MIN)
有的系统val2 = 0x7fffffff (INT_MAX)
[解决办法]我的意思是代码中最好不用float转换为其它的类型。