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

浮点数2.5的十六进制格式为0×40200000。。。。这个怎么转换过来的。。。。有点看不懂... 浮点数2.5的十六进制格式为0×40200000。。。。这个怎么转换过来的。。。。有点看不懂 展开
 我来答
吉祥二进制
高粉答主

2015-05-21 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84564

向TA提问 私信TA
展开全部

  数据类型的作用是说明数据和操作的意义,换句话说给定一块内存,可以说它是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 );
}

  

幻翼高达Zero
2019-07-19 · TA获得超过1.7万个赞
知道答主
回答量:499
采纳率:0%
帮助的人:7.3万
展开全部

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

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

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

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lbiiun
推荐于2017-09-26 · TA获得超过428个赞
知道小有建树答主
回答量:131
采纳率:100%
帮助的人:51万
展开全部
首先 浮点数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位记录阶码没明白。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大气猫44
推荐于2017-09-12 · TA获得超过1257个赞
知道答主
回答量:74
采纳率:0%
帮助的人:8.2万
展开全部
#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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Magic_旭
2013-06-05 · 超过41用户采纳过TA的回答
知道答主
回答量:287
采纳率:100%
帮助的人:118万
展开全部
2.5的十六进制格式不是0x40200000,而是:
整数部分:
0x2
小数部分:
0.5*16=8=0x8
结合起来:
0x2.8
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式