C语言语句YPR[0]=(BUF[1]<<8|BUF[2]),以及 >> 8 &0xFF如何理解?

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]

关于位运算 >> 8 & 0xFF

>> 右移

0xFF : 0000 0000 0000 0000 0000 0000 1111 1111

& 0xFF 作用,只取出当前低(最右面)8位,其他位补0

>>右移 8 位,之后 & 0xFF ,则是取出未移位前数高 8位(当前数最右面的8位)的数值

欢迎关注公众号,干货满满。

C语言语句YPR[0]=(BUF[1]<<8|BUF[2]),以及 >> 8 &0xFF如何理解?_第1张图片

你可能感兴趣的:(嵌入式STM32,C/C++,c语言,stm32,嵌入式,串口通信)