打印

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

[复制链接]
6222|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:

浮点数是可以很大或很小的,没有说一定就是个十几数量级的数。若一定要限制在这个数量级范围,那便是“定点数”了,即就是一般的整数。

使用特权

评论回复
5
highgear| | 2010-8-19 22:10 | 只看该作者
HWM, 我明白你的意思。

定点处理里最常用的方法就是 scale, 把浮点数转换到16-bit:  -32768 to 32767. 这里关心的是精度, 而不是数量级。无论这个数多大, 总有一个精度(如5位数字), 而且总可以被映射到 16-bit。 16bit 有 5 位数字精度。 

使用特权

评论回复
6
HWM| | 2010-8-19 22:17 | 只看该作者
数量级,是浮点数的重要组成部分。固定了数量级,此乃定点数。注:定点数不一定就是整数,可以用等有效位长的整数存储。

使用特权

评论回复
7
lzm2008|  楼主 | 2010-8-21 09:17 | 只看该作者
感谢,楼上两位的解答。
不好意思,分只能给一个,抱歉了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

29

主题

184

帖子

0

粉丝