首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

浮点数以16进制打印解决方案

2013-03-04 
浮点数以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 */

怎么计算的?


[解决办法]

引用:
引用:float val=FLT_MAX;
printf("0x%x",val);
直接这样就行,你那个转int之后就不是原来的样子了,3楼的转法能保持数据不变
只是想打印根本不需要进行这步转换,printf根本不管你是什么类型的

引用:可以看看内存中的排列

float的使用一定要小……
你真搞笑,(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 val=FLT_MAX;
printf("0x%x",val);
直接这样就行,你那个转int之后就不是原来的样子了,3楼的转法能保持数据不变
只是想打印根本不需要进行这步转换,printf根本不管你是什么类型的

引用:可以看看内存中的排列

float的使用一定要小……


我的意思是代码中最好不用float转换为其它的类型。

热点排行
Bad Request.