| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3893 人关注过本帖
标题:[求助]C语言实现浮点数到十六位十六进制
只看楼主 加入收藏
hualinxf
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-21
收藏
 问题点数:0 回复次数:7 
[求助]C语言实现浮点数到十六位十六进制

符号位保留,中间8位减96(1100000)再去掉最高2位就成是中间6位,然后小数位取原23位中前9位。再将此2进制表示法转成16进制即可。
这就是32位浮点数转成16位的规律,可是C语言不能对浮点数进行移位操作啊,各位帮忙。

[此贴子已经被作者于2007-8-29 10:02:40编辑过]

搜索更多相关主题的帖子: C语言 十六进制 点数 
2007-08-29 09:59
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
float f = 12.3;
int *p=(int*)&f;
int n = *p;
//然后操作n。。。。



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-29 10:11
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
以上代码那个操作要成功的前提是int为32位



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-29 10:13
hualinxf
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-21
收藏
得分:0 
但是中间是要减去96的,如何实现
2007-08-29 10:16
hualinxf
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-21
收藏
得分:0 
回复:(雨中飞燕)float f = 12.3;int *p=(int*)&...
用C语言编写浮点转16进制:
int main()
{
double input;
float convert;
long hex;
int i;
printf("输入需要转换的数:\n");
scanf("%lf",&input);
convert = (float)input;
hex = *(long *)&convert;
printf("二进制值:\n");
printf("%d ",(hex&0x80000000)==0?0:1);
for(i=30;i>=23;--i)
printf("%d",(hex>>i) & 1);
printf(" ");
for(i=22;i>=0;--i)
{ printf("%d",(hex>>i) & 1);
}
printf("\n十六进制值:\n%08lX\n",hex);
system("pause");
return 0;
}
现在要转换成16位的。
2007-08-29 10:18
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
变成int后你怎么移位操作你都可以啊
怎么去减又不难,就是移位啊



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-29 10:18
hualinxf
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-21
收藏
得分:0 
回复:(雨中飞燕)变成int后你怎么移位操作你都可以啊...
用C语言编写浮点转16进制:
int main()
{
double input;
float convert;
long hex;
int i;
printf("输入需要转换的数:\n");
scanf("%lf",&input);
convert = (float)input;
hex = *(long *)&convert;
printf("二进制值:\n");
printf("%d ",(hex&0x80000000)==0?0:1);
for(i=30;i>=23;--i)
printf("%d",(hex>>i) & 1);
printf(" ");
for(i=22;i>=0;--i)
{ printf("%d",(hex>>i) & 1);
}
printf("\n十六进制值:\n%08lX\n",hex);
system("pause");
return 0;
}
现在要转换成16位的。
2007-08-29 10:20
hualinxf
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-8-21
收藏
得分:0 
回复:(雨中飞燕)变成int后你怎么移位操作你都可以啊...

写好了,代码如下:

#include <stdio.h>

int main()
{
double input;
float convert;
long hex;
int i;
int s[4];
int se[16];
char b[4];
printf("输入要转换的浮点数:\n");
scanf("%lf",&input);
convert = (float)input;
hex =*(long*)&convert;
se[15]=((hex&0x80000000)==0?0:1);
hex=hex+0x50000000;
se[0]=((hex>>28)&1);

se[1]=((hex>>27)&1);

se[2]=((hex>>26)&1);
s[0]=se[15]*8+se[0]*4+se[1]*2+se[2];

se[3]=((hex>>25)&1);

se[4]=((hex>>24)&1);

se[5]=((hex>>23)&1);

se[6]=((hex>>22)&1);
s[1]=se[3]*8+se[4]*4+se[5]*2+se[6];

se[7]=((hex>>21)&1);
s[2]=s[2]+se[7]*8;

se[8]=((hex>>20)&1);
s[2]=s[2]+se[8]*4;

se[9]=((hex>>19)&1);

se[10]=((hex>>18)&1);
s[2]=se[7]*8+se[8]*4+se[9]*2+se[10];

se[11]=((hex>>17)&1);

se[12]=((hex>>16)&1);

se[13]=((hex>>15)&1);

se[14]=((hex>>14)&1);
s[3]=se[11]*8+se[12]*4+se[13]*2+se[14];
for(i=0;i<4;i++)
{
switch(s[i])
{
case 10: b[i]='a';break;
case 11: b[i]='b';break;
case 12: b[i]='c';break;
case 13: b[i]='d';break;
case 14: b[i]='e';break;
case 15: b[i]='f';break;
default :b[i]=s[i]+48;break;
}
}
printf("十六位十六进制为:0x%c%c%c%c",b[0],b[1],b[2],b[3]);
system("pause");
return 0;
}

2007-08-29 14:56
快速回复:[求助]C语言实现浮点数到十六位十六进制
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032397 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved