请问负数的浮点数如何处理成16进制显示?

[复制链接]
7097|6
 楼主| lzm2008 发表于 2010-8-19 18:33 | 显示全部楼层 |阅读模式
本帖最后由 lzm2008 于 2010-8-19 19:01 编辑

现在情况如下: 已经知道一个负数浮点数变量i例如: i = -13.524; 现在我要将i转换成16进制数上传到串口助手上以16进制数(显示M ,N) M = i/256;(高八位) N = i%256;(低八位) 请问各位大侠如何写函数实现。 不知道我表达的意思是否够明白,请个位帮一下忙。谢谢!
HWM 发表于 2010-8-19 21:08 | 显示全部楼层
若是浮点数,则由尾数和阶数构成。尾数长度决定有效位数,阶数长度决定数值范围。看你的有效位数,基本已经占满了16位,因此估计不是浮点数,而是定点数。定点数,只要知道小数点放在哪里即可。

评分

参与人数 1威望 +1 收起 理由
lzm2008 + 1

查看全部评分

highgear 发表于 2010-8-19 21:14 | 显示全部楼层
1) 用 4 bytes:
   float f = -13.524;
   char* bytes = (char*) &f;
   发送 bytes[0] to bytes[3];

2) 用 2 bytes:
   short s = -13.524 * 2048 = -27697
   PC 端:
    float = s /2048 = -13.523926

评分

参与人数 1威望 +1 收起 理由
lzm2008 + 1

查看全部评分

HWM 发表于 2010-8-19 21:25 | 显示全部楼层
to 3L:

浮点数是可以很大或很小的,没有说一定就是个十几数量级的数。若一定要限制在这个数量级范围,那便是“定点数”了,即就是一般的整数。
highgear 发表于 2010-8-19 22:10 | 显示全部楼层
HWM, 我明白你的意思。

定点处理里最常用的方法就是 scale, 把浮点数转换到16-bit:  -32768 to 32767. 这里关心的是精度, 而不是数量级。无论这个数多大, 总有一个精度(如5位数字), 而且总可以被映射到 16-bit。 16bit 有 5 位数字精度。 
HWM 发表于 2010-8-19 22:17 | 显示全部楼层
数量级,是浮点数的重要组成部分。固定了数量级,此乃定点数。注:定点数不一定就是整数,可以用等有效位长的整数存储。
 楼主| lzm2008 发表于 2010-8-21 09:17 | 显示全部楼层
感谢,楼上两位的解答。
不好意思,分只能给一个,抱歉了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:HOLTEK QQ:710536965 ------------------------------------------------------------------------------

29

主题

193

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部