c语言、浮点数怎么变成16进制
展开全部
需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。
2、在test.cpp文件中,输入C语言代码:printf("%x", 1515);。
3、编译器运行test.cpp文件,此时成功通过%x输出了十六进制的格式。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先 浮点数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 无穷大 在符点数里比较特殊另外处理(我也不太明白-_-!)
然后要把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位记录阶码没明白。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
2.5的十六进制格式不是0x40200000,而是:
整数部分:
0x2
小数部分:
0.5*16=8=0x8
结合起来:
0x2.8
整数部分:
0x2
小数部分:
0.5*16=8=0x8
结合起来:
0x2.8
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询