找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1321|回复: 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                  
                }               
              }

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







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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;
这两句看不懂呀。
回复

使用道具 举报

5#
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
回复

使用道具 举报

6#
ID:261544 发表于 2023-1-3 13:48 | 只看该作者
frame[temp3+temp1/8]>>=1;
是将   frame[3]和frame[4]中的值右移1位吗?
回复

使用道具 举报

7#
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 单片机教程网

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