|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 三个字节的16进制数转成浮点数是多少?
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
2975
人关注过本帖
标题:
三个字节的16进制数转成浮点数是多少?
只看楼主
加入收藏
yangguang226
等 级:
新手上路
帖 子:5
专家分:0
注 册:2019-8-8
结帖率:
0
楼主
收藏
已结贴
√
问题点数:20 回复次数:9
三个字节的16进制数转成浮点数是多少?
如题
现有 三个字节 16进制 0A F9 C0
第一个字节的第7位表示浮点数的符号,第6位表示浮点数阶码的符号,其余6位表示阶码
第二个字节表示浮点数的尾数(高字节)
第三个字节表示浮点数的尾数(低字节)
求这三个字节 转换成 十进制浮点为多少?
搜索更多相关主题的帖子:
字节
进制
浮点数
多少
表示
2019-08-08 11:37
举报帖子
使用道具
赠送鲜花
yangguang226
等 级:
新手上路
帖 子:5
专家分:0
注 册:2019-8-8
第
2
楼
收藏
得分:0
请路过的各位指教一下,我现在急着解决的。
2019-08-08 11:47
举报帖子
使用道具
赠送鲜花
wmf2014
等 级:
贵宾
威 望:
216
帖 子:2039
专家分:11273
注 册:2014-12-6
第
3
楼
收藏
得分:10
0000 1010 1 1111 1001 1100 0000=(BIN)1 1111 1001 11.00 0000=(DEC)2023.0
大概是这样。
能编个毛线衣吗?
2019-08-08 11:54
举报帖子
使用道具
赠送鲜花
yangguang226
等 级:
新手上路
帖 子:5
专家分:0
注 册:2019-8-8
第
4
楼
收藏
得分:0
回复 3楼 wmf2014
您好,好像不是这样的。
0AF9C0换算成十进制,应该是999。
2019-08-08 14:07
举报帖子
使用道具
赠送鲜花
wmf2014
等 级:
贵宾
威 望:
216
帖 子:2039
专家分:11273
注 册:2014-12-6
第
5
楼
收藏
得分:0
那我尝试着转换为IEEE754浮点数。
31:符号位、30-23:指数位、22-0:尾数位,把6位指数位扩展为8位指数位+127,将16位尾数位扩展位23位尾数位,最后实际的二进制数据如下:
0 1000 100
1 1111 100
1 1100 000
0 0000 000
,分别对应32位16进制数据为:44 FC E0 00然后用下述代码反转换,得到的 结果就是2023.0,没有错。
#include <stdio.h>
int main()
{
union
{
char a[4];
float b;
} a;
a.a[0] = 0;
a.a[1] = 0xe0;
a.a[2] = 0xfc;
a.a[3] = 0x44;
printf("%f\n",a.b);
return 0;
}
运行结果:2023.000000
现详细说明转换原理。
根据你的描述,第一个字节0A,二进制为0000 1010,说明符号位0,阶码符号位0,小数点位置为 00 1010,即第十位,转换位IEEE754的阶码为10+127=137=0x89,尾数16位再补7个0就可以转换为IEEE754格式了,所以:
31:0
30-23:1000 1001
22-0:1111 1001 0000 000
[此贴子已经被作者于2019-8-8 16:02编辑过]
能编个毛线衣吗?
2019-08-08 15:44
举报帖子
使用道具
赠送鲜花
yangguang226
等 级:
新手上路
帖 子:5
专家分:0
注 册:2019-8-8
第
6
楼
收藏
得分:0
回复 5楼 wmf2014
你好,你这是算的四字节的浮点数。我这是三字节的。
2019-08-08 15:59
举报帖子
使用道具
赠送鲜花
wmf2014
等 级:
贵宾
威 望:
216
帖 子:2039
专家分:11273
注 册:2014-12-6
第
7
楼
收藏
得分:0
回复 6楼 yangguang226
我只是做对应转换为程序可识别的浮点数,好用代码验证,如果用你的三字节说明,则是:
数据符号位:0
阶码符号位:0
阶码:00 1010
浮点隐含位:1
//该位恒为1,不占用实际数据位
尾数:1111 1001 1100 0000
拼合实际二进制数据为:0
0
001010
1
1111 1001 1100 0000,小数点在第10位,所以实际浮点二进制数据位:1 1111 1001 11.00 0000,由于小数点后均为0,所以这个数的二进制数为:1 1111 1001 11=0x7E7=(十进制)2023
你所说的999,缺少恒为1的隐含位,因此你的二进制浮点数应该是0.1111 1001 1100 0000*2^10,最后的数据为1111 1001 11=0x3E7=(十进制)999,这不符合浮点数表示法。
[此贴子已经被作者于2019-8-8 16:25编辑过]
能编个毛线衣吗?
2019-08-08 16:17
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43182
注 册:2014-5-20
第
8
楼
收藏
得分:10
我算的是83950016??
0x0A = 0b0000 1010
0xF9 = 0b1111 1001
0xC0 = 0b1100 0000
float类型: S(1bit) + E(8bit) + M(23bit)
0b0000 0101 0000 0000 1111 1001 1100 0000 = 83950016
#include <stdio.h>
main()
{
char s[3] = {0x0A, 0xF9, 0xC0};
int a = ((s[0]>>6)<<31) | ((s[0]&0x3F)<<23) | ((s[1]<<8)&0xFF00) | (s[2]&0xff);
float b = (float)a;
printf("%f\n", b);
}
2019-08-08 17:26
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43182
注 册:2014-5-20
第
9
楼
收藏
得分:0
回复 8楼 吹水佬
当整数处理了
2019-08-08 17:30
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43182
注 册:2014-5-20
第
10
楼
收藏
得分:0
是不是这样理解:
0x0A = 0b0000 1010
S符号+,E阶乘符号+,e=0x0A=10
0xF9C0 = 0b1111 1001 1100 0000
0x0AF9C0 = 0.1111100111000000*2^10 => 1111100111.000000 = 999.0
[此贴子已经被作者于2019-8-8 20:15编辑过]
2019-08-08 20:12
举报帖子
使用道具
赠送鲜花
10
1/1页
1
快速回复:
三个字节的16进制数转成浮点数是多少?
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.026542 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved