找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1284|回复: 6
收起左侧

C语言代码运行过程求解释

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:261544 发表于 2022-12-27 19:51 | 显示全部楼层 |阅读模式
本帖最后由 夜问夜问 于 2022-12-27 19:53 编辑

    temp3=3;
              for(temp1=startData;temp1<endData;temp1++)
              {
                if(temp1%8==0) frame[3+temp1/8]=0x00;
                frame[temp3+temp1/8]>>=1;
                frame[temp3+temp1/8]|=(modbusData[startData+temp1]<<7) & 0x80;
                if(temp1==dataSize-1) //发送到最后一个位了
                {
                     if(dataSize%8)
                     frame[3+temp1/8]>>=8-(dataSize%8);//如果最后一个字节还有余数,则剩余MSB填充0                  
                }               
              }

上面这部分代码不知道运算过程是怎么样的,看的晕乎乎求讲解执行过程谢谢







回复

使用道具 举报

ID:1059656 发表于 2022-12-29 18:24 | 显示全部楼层
就是有三个字节的数 将这个数除以8 一直除三遍 直到最后一位 有余数就补0
回复

使用道具 举报

ID:1059868 发表于 2022-12-31 10:03 | 显示全部楼层
除以8取余数补0
回复

使用道具 举报

ID:261544 发表于 2022-12-31 10:08 | 显示全部楼层
   frame[temp3+temp1/8]>>=1;
   frame[temp3+temp1/8]|=(modbusData[startData+temp1]<<7) & 0x80;
这两句看不懂呀。
回复

使用道具 举报

ID:308903 发表于 2023-1-3 09:05 | 显示全部楼层
夜问夜问 发表于 2022-12-31 10:08
frame[temp3+temp1/8]>>=1;
   frame[temp3+temp1/8]|=(modbusData[startData+temp1]

frame[temp3+temp1/8]>>=1;    frame【】 右移一位,
frame[temp3+temp1/8]|=(modbusData[startData+temp1]     ;先与运算置0 ,低四位置0,再或运算赋值,1
回复

使用道具 举报

ID:261544 发表于 2023-1-3 13:48 | 显示全部楼层
frame[temp3+temp1/8]>>=1;
是将   frame[3]和frame[4]中的值右移1位吗?
回复

使用道具 举报

ID:1060170 发表于 2023-1-3 15:27 | 显示全部楼层
夜问夜问 发表于 2023-1-3 13:48
frame[temp3+temp1/8]>>=1;
是将   frame[3]和frame[4]中的值右移1位吗?

这个等价于 frame[temp3+temp1/8] = (frame[temp3+temp1/8] >> 1);
如果temp3 = 3, temp1 = 0,则等价于 frame[3] = (frame[3] >> 1);
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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