LabVIEW论坛
直播中

晴兮晴兮

12年用户 566经验值
私信 关注
[问答]

labview的公式节点中的移位有bug啊

比如我写入 如下代码在公式节点

uInt16 a1=0xABCD, a2 ,a3;

a2=a1>>8;  //右移8位

a3=a1<<8; //左移8位


把a2,a3输出显示,其结果是a2为AB,a3为FFFF,可以看到左移是错误的。不知道大家发现没有。


而在c语言中,就没有这个问题。




已退回5积分

回帖(6)

芒果冰

2014-11-13 11:25:46
按照题目所说做了两组试验:
A.所有变量使用Uint16来进行左、右位移的运算
B.所有变量使用Uint32来进行左、右位移的运算

采用uInt16则问题复现。而采用uInt32则计算结果正常。因此个人观点为:因为0xFFFF代表的是uInt16的最大值,所以是否为LabVIEW在处理左移超出数制范围时,默认其为无穷大或最大,因而采用0xFFFF表示。而不是单纯的抛弃左端,向右补“0”。
124335tjmv2k7q7k9tsv2v.jpg



124330rjaa6akagia6l6aj.jpg

举报

偶是糕富帅

2014-11-13 11:29:40
是不是可以这么理解,左移是乘法,所以会溢出。因为存在高位溢出的情况,所以,一般在左移的时候,会考虑将数据类型升级,如u16,变为u32.

uInt16 a1=0xABCD, a2 ,a3;
uInt32 a4;
a2=a1>>8;
a4=a1<<8;
a3=a4&0xFFFF;

一般是这样用
举报

华山

2014-11-13 11:30:36
楼主应该再看看公式节点的帮助和说明。
举报

sky007tao

2015-3-6 18:33:56
问题是有的,可以这样解决,看图片…
举报
  • IMG_20150306_134453.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分