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

2019-07-17 11:37发布

比如我写入 如下代码在公式节点uInt16 a1=0xABCD, a2 ,a3;a2=a1>>8;  //右移8位a3=a1<<8; //左移8位
把a2,a3输出显示,其结果是a2为AB,a3为FFFF,可以看到左移是错误的。不知道大家发现没有。
而在c语言中,就没有这个问题。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
芒果冰
1楼-- · 2019-07-17 14:33
按照题目所说做了两组试验:
A.所有变量使用Uint16来进行左、右位移的运算
B.所有变量使用Uint32来进行左、右位移的运算

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



124330rjaa6akagia6l6aj.jpg

偶是糕富帅
2楼-- · 2019-07-17 18:20
是不是可以这么理解,左移是乘法,所以会溢出。因为存在高位溢出的情况,所以,一般在左移的时候,会考虑将数据类型升级,如u16,变为u32.

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

一般是这样用
infor_work
3楼-- · 2019-07-17 22:46
楼主应该再看看公式节点的帮助和说明。
sky007tao
4楼-- · 2019-07-18 03:56
问题是有的,可以这样解决,看图片…
IMG_20150306_134453.jpg
flykick
5楼-- · 2019-07-18 08:08
 精彩回答 2  元偷偷看……
珍惜拥有得
6楼-- · 2019-07-18 08:56
学习了,很少使用公式节点

一周热门 更多>