如何在Keil中实现二进制运算

2019-07-21 00:13发布

使用Keil4.7编程,在运算中用到一行代码:lX  = (lBufOutArray[i] << 16) >> 16,这里的lBufOutArray[]是我自己定义的一个float数组;但是系统显示Keil显示error:invalid oprands to binary expression;也就是说Keil无法对float数组进行二进制运算;但是我又不得不用到这种运算,请问该怎么解决?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
wtctx
1楼-- · 2019-07-21 02:06
 精彩回答 2  元偷偷看……
DongInker
2楼-- · 2019-07-21 05:46
浮点型类型有自己的存储规范,直接移位操作不可取
wtctx
3楼-- · 2019-07-21 06:39
DongInker 发表于 2019-6-8 22:03
浮点型类型有自己的存储规范,直接移位操作不可取

那么请问应该怎样进行二进制操作呢?比如说改变数组类型?
mack13013
4楼-- · 2019-07-21 08:12
本帖最后由 mack13013 于 2019-6-8 22:25 编辑
wtctx 发表于 2019-6-8 22:17
那么请问应该怎样进行二进制操作呢?比如说改变数组类型?

强制转换成整形试试,比如 lX  = (这里可能需要再进行一次强制转换,转换成跟IX匹配的类型)((((int)lBufOutArray) << 16) >> 16);
Plly
5楼-- · 2019-07-21 13:39
能不能将浮点放大,再转换成整形,这样就可以进行你的运算了。例如1234.56789看你保留几位小数了,假设3位放大1000倍并转换为整形,成为1234567。
edmund1234
6楼-- · 2019-07-21 16:18
本帖最后由 edmund1234 于 2019-6-9 08:00 编辑

首先你要先搞清楚
float ff=1.23f;
强行把它转换后进行移位<<16后, 它绝对不会等于1.23*2^16
不信你自己试试, 这样就可以通过编译
lX  = ((u32)lBufOutArray << 16) >> 16;

你还是把你要移位的目的说出来, 自然会有人给你想办法


一周热门 更多>