标题: 关于C语言数组值求解 [打印本页]

作者: 阿飞7812    时间: 2020-5-8 22:39
标题: 关于C语言数组值求解

作者: 黄youhui    时间: 2020-5-9 08:42
准确来说应该是i = 0x80;
你的代码不严谨(da1527[0][ i]>>(u*2)) & 3)==2)这里应该换成(da1527[0][ i]>>8) & 3)==2)

作者: benclee    时间: 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,并退出循环。
作者: carpcarey    时间: 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
}

所以。。。这是谁的锅?一个良好的写代码习惯是非常重要的!
作者: 阿飞7812    时间: 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  是根据什么来的 望指点
作者: 阿飞7812    时间: 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  是根据什么来的 望指点
作者: 阿飞7812    时间: 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也能出现这样的编码 就这没搞明白 望指点
作者: carpcarey    时间: 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,并退出循环。
理解了么?
作者: carpcarey    时间: 2020-5-14 10:00
阿飞7812 发表于 2020-5-11 21:19
谢谢你的指点
这是zhangxinchun的贴子里的程序 我想问的是为什么这里 (da1527[0][ i]>>(u*2)) & 3)==2) ...

你不是有个注释  //有10则为1527  么?
作者: 阿飞7812    时间: 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,永远都不会相等




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1