找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1631|回复: 9
收起左侧

关于C语言数组值求解

[复制链接]
ID:65237 发表于 2020-5-8 22:39 | 显示全部楼层 |阅读模式
  •                          if((da1527[0][0]==da1527[1][0]) && (da1527[0][1]==da1527[1][1]) && (da1527[0][2]==da1527[1][2]))
  •       //da1527收到的数据为11111101  10101010   11010100 , 11111101  10101010   11010100 这里成立
  •                       {
  •                      uchar u,i,x;
  •                                          rf_ok=1;
  •                                          for(i=0;i<3;i++)  //判定2262与1527
  •                         {
  •                            for(u=0;u<4;u++) {if(((da1527[0][ i]>>(u*2)) & 3)==2) {i=80;break;}}  //有10则为1527
  •                                                    if(i==80) break;
  •                         }
  •     for(u=0;u<4;u++) {if(((da1527[0][ i]>>(u*2)) & 3)==2) {i=80;break;}}  //这一句是怎么会是=80 怎么来的求解?
回复

使用道具 举报

ID:592807 发表于 2020-5-9 08:42 | 显示全部楼层
准确来说应该是i = 0x80;
你的代码不严谨(da1527[0][ i]>>(u*2)) & 3)==2)这里应该换成(da1527[0][ i]>>8) & 3)==2)
回复

使用道具 举报

ID:70069 发表于 2020-5-9 09:11 | 显示全部楼层
da1527[0][0]=11111101
u=0时11111101右移0为&3(00000011)=00000001与2不相等
u=1时11111101右移2位=00111111 &3=00000011与2不相等
u=2时11111101右移4位=00001111&3=00000011
u=3时11111101右移6位=00000011&3=00000011
da1527[0][1]=10101010
u=0时10101010右移0位=10101010&3=00000010与2相等
i=80,并退出循环。
回复

使用道具 举报

ID:267719 发表于 2020-5-9 10:38 | 显示全部楼层
//把你的代码重新整理一下
//da1527收到的数据为11111101  10101010   11010100 , 11111101  10101010   11010100 这里成立
if((da1527[0][0]==da1527[1][0]) && (da1527[0][1]==da1527[1][1]) && (da1527[0][2]==da1527[1][2]))
{
   uchar u,i,x;
   rf_ok=1;
   for(i=0;i<3;i++)  //判定2262与1527
   {
      for(u=0;u<4;u++)
      {
              if(((da1527[0][i]>>(u*2)) & 3)==2)
              {
                      i=80;break;
              }
      }  //有10则为1527
      if(i==80) break;
   }//10101010 里就有10 所以i=80
   for(u=0;u<4;u++)
   {
            if(((da1527[0][i]>>(u*2)) & 3)==2)
            {
                    i=80;break;
            }
   }  //这一句是怎么会是=80 怎么来的求解?   没有给i重新赋值,所以i还是80
}

所以。。。这是谁的锅?一个良好的写代码习惯是非常重要的!
回复

使用道具 举报

ID:65237 发表于 2020-5-11 21:15 | 显示全部楼层
黄youhui 发表于 2020-5-9 08:42
准确来说应该是i = 0x80;
你的代码不严谨(da1527[0][ i]>>(u*2)) & 3)==2)这里应该换成(da1527[0][ i]>>8 ...


谢谢你的指点
这是zhangxinchun的贴子里的程序 我想问的是为什么这里 (da1527[0][ i]>>(u*2)) & 3)==2)相式成立时就是da1527  是根据什么来的 望指点
回复

使用道具 举报

ID:65237 发表于 2020-5-11 21:16 | 显示全部楼层
benclee 发表于 2020-5-9 09:11
da1527[0][0]=11111101
u=0时11111101右移0为&3(00000011)=00000001与2不相等
u=1时11111101右移2位=00 ...

谢谢你的指点
这是zhangxinchun的贴子里的程序 我想问的是为什么这里 (da1527[0][ i]>>(u*2)) & 3)==2)相式成立时就是da1527  是根据什么来的 望指点
回复

使用道具 举报

ID:65237 发表于 2020-5-11 21:19 | 显示全部楼层
carpcarey 发表于 2020-5-9 10:38
//把你的代码重新整理一下
//da1527收到的数据为11111101  10101010   11010100 , 11111101  10101010    ...

谢谢你的指点
这是zhangxinchun的贴子里的程序 我想问的是为什么这里 (da1527[0][ i]>>(u*2)) & 3)==2)相式成立时就是da1527  是根据什么来的  因为TP2262也能出现这样的编码 就这没搞明白 望指点
回复

使用道具 举报

ID:267719 发表于 2020-5-14 09:39 | 显示全部楼层
阿飞7812 发表于 2020-5-11 21:19
谢谢你的指点
这是zhangxinchun的贴子里的程序 我想问的是为什么这里 (da1527[0][ i]>>(u*2)) & 3)==2) ...

da1527[0]里的数据是二进制的b7b6b5b4b3b2b1b0
那da1527[0]>>(u*2)  u从0到3 那结果就是
u=0  u*2=0 二进制结果 b7b6b5b4b3b2b1b0
u=1  u*2=2 二进制结果 0  0  b7b6b5b4b3b2
u=2  u*3=4 二进制结果 0  0  0  0  b7b6b5b4
u=3  u*3=6 二进制结果 0  0  0  0  0  0  b7b6
那结果&3就是与上二进制的00000011
得到的就是 000000b1b0 000000b3b2 000000b5b4 000000b7b6
判断是否==2,2的二进制是00000010
那就是看b1b0是不是10 ,b3b2是不是10 ,b5b4是不是10 ,b7b6是不是10
只要其中有1个是二进制10,就置标志i=80,并退出循环。
理解了么?
回复

使用道具 举报

ID:267719 发表于 2020-5-14 10:00 | 显示全部楼层
阿飞7812 发表于 2020-5-11 21:19
谢谢你的指点
这是zhangxinchun的贴子里的程序 我想问的是为什么这里 (da1527[0][ i]>>(u*2)) & 3)==2) ...

你不是有个注释  //有10则为1527  么?
回复

使用道具 举报

ID:65237 发表于 2020-5-15 09:01 来自手机 | 显示全部楼层
黄youhui 发表于 2020-5-9 08:42
准确来说应该是i = 0x80;
你的代码不严谨(da1527[0][ i]>>(u*2)) & 3)==2)这里应该换成(da1527[0][ i]>>8 ...

你这移8位 你把8位都移出了 全变0,永远都不会相等
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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