C语言语句YPR[0]=(BUF[1]<<8|BUF[2])如何理解?

C语言语句YPR[0]=(BUF[1]<<8|BUF[2])如何理解?

这是一个赋值语句,把等式右边的值赋给左边;先来看左边是怎么运算的,
由于移位运算符<<的优先级大于位运算符|,所以先计算BUF[1]左移八位,然后再上BUF[2],
或的操作可以理解为两个数相加;通俗理解的话可以举个列子,
假设BUF[1]的值为0000 0001b(为方便描述,故用二进制表示) ,左移八位后变成10000 0000b ,BUF[2]的值为1 ,然后两者相加变为10000 0001 b

这是算术优先级的问题吧。这两个都是双目运算符,而移位运算符的优先级是大于位运算符的,所以你只要先将BUF[1]<<8,然后结果或上BUF[2]

数据拆包发送后又合成吗,== 串口通信一般就是8位, 想发送个16位的数据就需要拆包==,高八位 低八位装在两个8位的变量里。接收到之后再进行合成。 你的代码就是将BUF[1]中的数作为高位,BUF[2]中的数作为低位 ,合成的位数放进YRR[0]

欢迎关注公众号,干货满满。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43499780/article/details/109002505