打印

求教大神:如何取float数据中的指定位??

[复制链接]
1760|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiangnanyanmeng|  楼主 | 2015-10-20 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jiangnanyanmeng 于 2015-10-20 23:03 编辑

各位大神:小弟我第一次编C程序。遇到一个float 型数据取指定位的问题,试了好几天都没能解决,恳求各位大神,大哥、大姐帮助!小弟感谢不尽!!具体问题是: 小弟在写一个计量芯片的校准程序时,上面有一步,要求将有效值寄存器A的10个数据的平均值W,赋给另一个寄存器B和C;并且规定:将W的 [23到8]位,赋给寄存器B;将W的 [7到4]位,赋给寄存器C的[7到4]位;A为24bit有效值寄存器;B为16bit寄存器,C为8bit寄存器;不知小弟这样说,大家觉得清楚吗?如果不清楚小弟在后面在补充。小弟实在是不知这个咋取指定位了!!

相关帖子

沙发
ayb_ice| | 2015-10-21 07:59 | 只看该作者
浮点数转为整型再赋值即可

使用特权

评论回复
板凳
jiangnanyanmeng|  楼主 | 2015-10-21 12:23 | 只看该作者
ayb_ice 发表于 2015-10-21 07:59
浮点数转为整型再赋值即可

      大神是说用强制类型转换吗?我想过先将float 型数据转为 long int 然后再赋值。可关键是这个不会转啊,因为如果强制转换:
如 float  a;   long int  b;   b=(long int) a;    这样b得到的将只是a 的整数部分;   烦请大神详细说说如何转换??谢谢!!!!!

使用特权

评论回复
地板
ayb_ice| | 2015-10-21 13:34 | 只看该作者
jiangnanyanmeng 发表于 2015-10-21 12:23
大神是说用强制类型转换吗?我想过先将float 型数据转为 long int 然后再赋值。可关键是这个不会转 ...

只能取整数部分,小数部分可以放大浮点数,比如*10,*100

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
jiangnanyanmeng + 1 谢谢
5
jiangnanyanmeng|  楼主 | 2015-10-21 19:10 | 只看该作者
ayb_ice 发表于 2015-10-21 13:34
只能取整数部分,小数部分可以放大浮点数,比如*10,*100

我试了下,不知道取出的对不对。因为我看网上说float 的存储顺序和 int 存储顺序不一样。大神,我今天看到说可以将float数据转为4字节HEX数据,在取指定位;不知这个行不,这个和我这样取得结果一样吗?如果行这个float数据如何转为4字节HEX数据啊?大神可能我问的有点多,抱歉!这方面真的不懂,脑袋好迷糊了。

使用特权

评论回复
6
jiangnanyanmeng|  楼主 | 2015-10-22 00:52 | 只看该作者
对了,大神您说放大浮点数在再赋值,那被赋值寄存器的值不就变大了吗?

使用特权

评论回复
7
ayb_ice| | 2015-10-22 08:00 | 只看该作者
jiangnanyanmeng 发表于 2015-10-21 19:10
我试了下,不知道取出的对不对。因为我看网上说float 的存储顺序和 int 存储顺序不一样。大神,我今天看 ...

你的目标寄存器是浮点数格式的吗,应该不可能吧

使用特权

评论回复
8
wh6ic| | 2015-10-22 09:38 | 只看该作者
用 类型强制转换 变为四字节的 ulong,然后取其中的某部分。或者用汇编直接取。不过你这是3字节的浮点数?转换时前面还要空一个字节或者将最高字节赋值为0

使用特权

评论回复
9
jiangnanyanmeng|  楼主 | 2015-10-22 12:39 | 只看该作者
ayb_ice 发表于 2015-10-22 08:00
你的目标寄存器是浮点数格式的吗,应该不可能吧

大神:这个手册上没说,只是说这个寄存器B是16bit的,是个有效值OFFSET寄存器,C也没说;我是看着有效值的平均值判断W为浮点数的;

使用特权

评论回复
10
jiangnanyanmeng|  楼主 | 2015-10-22 12:43 | 只看该作者
wh6ic 发表于 2015-10-22 09:38
用 类型强制转换 变为四字节的 ulong,然后取其中的某部分。或者用汇编直接取。不过你这是3字节的浮点数? ...

可强制类型转换只能取出float数据的整数部分,小数部分就没了啊

使用特权

评论回复
11
wh6ic| | 2015-10-22 13:20 | 只看该作者
jiangnanyanmeng 发表于 2015-10-22 12:43
可强制类型转换只能取出float数据的整数部分,小数部分就没了啊

不是数值转换,是Bit对Bit转换

使用特权

评论回复
12
ayb_ice| | 2015-10-22 13:30 | 只看该作者
jiangnanyanmeng 发表于 2015-10-22 12:39
大神:这个手册上没说,只是说这个寄存器B是16bit的,是个有效值OFFSET寄存器,C也没说;我是看着有效值 ...

一般不会是浮点格式的,

你这些基本的东西都不搞清楚,就瞎整,没用的

使用特权

评论回复
13
wh6ic| | 2015-10-22 13:32 | 只看该作者
unsigned long aa;
float xx;

aa = *( long *) & xx;

使用特权

评论回复
14
jiangnanyanmeng|  楼主 | 2015-10-22 17:54 | 只看该作者
ayb_ice 发表于 2015-10-22 13:30
一般不会是浮点格式的,

你这些基本的东西都不搞清楚,就瞎整,没用的 ...

大侠说的是!!小弟这些全是出于对单片机的兴趣。小弟C虽学过,但惭愧未学好,也好几年未编程过。第一次写这种程序。公司也没有搞软件的,手头也没有现成的例子,数据手册还是百度上看的;不过能得到各位大侠的指点,我就很开心了。谢谢!!!

使用特权

评论回复
15
jiangnanyanmeng|  楼主 | 2015-10-22 18:07 | 只看该作者
wh6ic 发表于 2015-10-22 13:32
unsigned long aa;
float xx;

哦,我试了下可以啊,谢谢大神啊,大神威武,积分马上奉上!

使用特权

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

本版积分规则

5

主题

36

帖子

0

粉丝