找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2925|回复: 4
收起左侧

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

[复制链接]
ID:374198 发表于 2019-8-5 17:39 | 显示全部楼层 |阅读模式
请教一下,YPR[0]=(BUF[1]<<8|BUF[2]); 这句话在c语言里怎样理解》???
回复

使用道具 举报

ID:377268 发表于 2019-8-5 22:23 | 显示全部楼层
数据拆包发送后又合成吗/, 串口通信一般就是8位, 想发送个16位的数据就需要拆包,高八位 第八位装在两个8位的变量里。接收到之后再进行合成。 你的代码就是将BUF[1]中的数作为高位,BUF[2]中的数作为低位 ,合成的位数放进YRR[0]
回复

使用道具 举报

ID:529540 发表于 2019-8-6 15:38 | 显示全部楼层
额,就这样理解,按语句一步步运算啊,可以直接定义几个值然后按这样运算然后看看结果是怎么样的,加深印象啊,可以帮助你更深入的了解这语句的意思,会有什么样的结果,你就知道为什么怎么写了。
回复

使用道具 举报

ID:362259 发表于 2019-8-6 18:09 | 显示全部楼层
这是算术优先级的问题吧。这两个都是双目运算符,而移位运算符的优先级是大于位运算符的,所以你只要先将BUF[1]<<8,然后结果或上BUF[2]
回复

使用道具 举报

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表