c语言、浮点数怎么变成16进制

浮点数2.5的十六进制格式为0×40200000。。。。这个怎么转换过来的。。。。有点看不懂

  数据类型的作用是说明数据和操作的意义,换句话说给定一块内存,可以说它是int类型,也可以说它是float类型。


  同时C语言中输出十六进制数,必须是整型数,因此,可以使用union联合体来输出浮点数的16进制。示例代码如下:

#include <stdio.h>
union fi
{
float f;
int i;
} ufi;
int main()
{
ufi.f = 1.1f;
printf("%x\n", ufi.i );
}

  

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-19

需要准备的材料分别有:电脑、C语言。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,输入C语言代码:printf("%x", 1515);。

3、编译器运行test.cpp文件,此时成功通过%x输出了十六进制的格式。

本回答被网友采纳
第2个回答  推荐于2017-09-26
首先 浮点数2.5写成二进制应该为10.1(其中整数部分10b=2d, 小数部分0.1*2=1所以0.1b为0.5d)。
然后要把10.1规格化(写成1.xxxx * 2^n的形式,有点像科学计数法)得到1.01*2^1(其中2^1中的1为阶码, 1.01为有效数字)
加上2.5为正数,这就得到三部分信息:
1. 有效数字为1.01.
2. 阶码为1.
3. 符点数为正数

而c/c++的float类型结构为:
1. 最低的23位记录规格化小数中的有效数字(但是不保存最前面的1)
2. 之后的8位记录阶码(上面的阶码转换到这里要+127)
3. 最高的一位表示正负数(0为正数,1为负数)

最终得到的二进制数为:
高位 低位
0 10000000 01000000000000000000000
整理得:
0100 0000 0010 0000 0000 0000 0000 0000
转到16进制得:
40200000

注意:0 无穷大 在符点数里比较特殊另外处理(我也不太明白-_-!)追问

那里具体怎么得到那么长的二进制数的我还是没有看懂,8位记录阶码没明白。。。

那里具体怎么得到那么长的二进制数的我还是没有看懂,8位记录阶码没明白。。。

追答

有效数字得到 1.01应该没有问题吧
那么1.01 = 1.010 = 1.0100 ... 小数部分后面可以加无数的0, 跟整数部分在前面加无数的0是一个道理。
如果是10进制的话 12345 = 1.2345 * 10^4 那么4就阶码, 1.2345是有效数字。
同理,2进制的 10.1 = 1.01 * 2^1 1为阶码 1.01为有效数字(更为特殊是整数部分只能为1, 因为为0的话,就不是有效数字了)

本回答被提问者采纳
第3个回答  推荐于2017-09-12
#include <stdio.h>
float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数
{
// char cByte[4];//方法一
// for (int i=0;i<num;i++)
// {
// cByte[i] = Byte[i];
// }
//
// float pfValue=*(float*)&cByte;
//return pfValue;

return *((float*)Byte);//方法二

}
long FloatTohex(float HEX)//浮点数到十六进制转换1
{
return *( long *)&HEX;
}

void FloatToByte(float floatNum,unsigned char* byteArry)////浮点数到十六进制转换2
{
char* pchar=(char*)&floatNum;
for(int i=0;i<sizeof(float);i++)
{
*byteArry=*pchar;
pchar++;
byteArry++;

}
}

void main()
{
unsigned char floatToHex[4];
unsigned char hexbyte[4]={0xcd,0xCC,0xCC,0x3D};//传输数据为3d cc cc cd
float Hdecimal=0.0;
float flh=0.4;
// int num=sizeof(hexbyte);
// printf("num= %d\n",num);
Hdecimal=Hex_To_Decimal(hexbyte,sizeof(hexbyte));//十六进制转换为浮点数
printf("\n 浮点数为:\n %f\n",Hdecimal);
第4个回答  2013-06-05
2.5的十六进制格式不是0x40200000,而是:
整数部分:
0x2
小数部分:
0.5*16=8=0x8
结合起来:
0x2.8

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网