C语言里浮点数赋值为十六进制形式怎么做?

C语言中能用IEEE 754标准的十六进制形式赋值浮点数吗?比如float f=0x40a80000(对应的十进制形式应该是5.25); 输出时直接以十进制形式输出,但结果不是5.25。到底怎么表示16进制形式赋值啊?

由于对于0x40a80000这类16进制写法,编译器都会默认其为整数,所以不能这样去做。故而无法实现你的设想。如果你非要以十六进制形式赋值浮点数,那么只能通过其他途径了。

比如说这样写:

char cc[4] = {0x00,0x00,0xa8,0x40}; // 因为window为小端模式所以低字节存放在低地址,高字节存放在高地址
    float f=0.0f;
    memcpy(&f,cc,4);
    printf("%f",f);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-07
因为windows平台和vc编译条件下,int和float都占4个字节,所以可以简单的应用union完成,具体代码如下,
#include <stdio.h>
//联合fnum存储数据
union fnum
{
int m;
float f;
};
int main(int argc, char *argv[])
{
union fnum num;
num.m=0x40a80000;//十六进制数赋值给整数
printf("十六进制输出int:0x%x\n",num.m);//输出0x40a80000
printf("十进制输出float:%f\n",num.f);//输出5.250000
return 0;
}

联合uniom表示几个变量共用一个内存空间,在不同的时间保存不同的数据类型和不同长度的变量。所有的成员共享一个空间,并且同一时间只能储存其中一个成员变量的值。例中由于int和float所占空间相等,故可以实现相互转换。