C语句看不明白,请教!

2019-12-24 18:38发布

本帖最后由 ltby00 于 2017-8-31 10:27 编辑

#define   data1     4
#define   data2     196
#define   ADDR1    0x00E000

u8  funa(void)
{
    u8  i,  j ,  bufa[(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)];  //

   SPI_FLASH_Read(bufa,  ADDR1,  (data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0) );    ///读SPI  FLASH
   for(i=0;  i< (data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0);  i++)
   {
      for(j=0;   j<8;   j++){
         if(i<= data1 /8  &&  j<  data1 )   continue;
         if(bufa  & 1<<j)    return   i*8 +j; ///是    if(bufa  & 1<<j)    return   i*8 +j;
     }
  }
  return   0xfe;
}

    看不明白(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0) 应该指向FLASH芯片内的地址, 但是表达的什么 ?
 请教下大家!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
javenreal
1楼-- · 2019-12-26 14:48
(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)
--------------------- 这个写法并不好,模除很没效率的,模除8,用and 7就可以了。

实际这样写更好: (data1 + data2 + 7 ) / 8
ltby00
2楼-- · 2019-12-26 16:28
myxiaonia 发表于 2017-8-31 10:28
这个是定义一个数组,如果刚好是8的倍数,就数组元素数量就是这个值,否则的话增加一个元素,这种定义很直 ...


  确实是,  (data1 + data2 +7 ) / 8 巧妙的解决了8的倍数, 挺你!!!
markdif
3楼-- · 2019-12-26 18:40
 精彩回答 2  元偷偷看……
ALUMEI
4楼-- · 2019-12-26 23:30
就是对齐的意思,写得很晦涩。。。。
Ray______
5楼-- · 2019-12-27 02:06
javenreal 发表于 2017-8-31 10:54
(data1 + data2  ) / 8 + ((data1 + data2 )  % 8 ? 1:0)
--------------------- 这个写法并不好,模除很没 ...

思路很好,但是想不明白怎么得出来的。。。。

一周热门 更多>