-3

我不明白如何a<<b工作。

它实际上意味着a+= arr[i][j] ==0 && tfunc(i,j);什么?

是否意味着:

if (arr[i][j]==0 && tfunc(i,j) == true)
    a += 1;

部分代码如下:

int *eFunc(int* a) const{
   for(int i=0; i<8; ++i){
      for(int j=0; j<8; ++j){
         *a = b <<3^j; 
          a+= arr[i][j] ==0 && tfunc(i,j); 
      }
   }
   return a;
 }

提前致谢

4

1 回答 1

2
*a = b <<3^j; 

感谢@Holt 指出它<<的优先级高于^. 让我们一步一步来:

(b << 3) ^ j
b << 3     // Bitshifting operator. Shift b to the left by 3`
           // So for b = 0b0001  you get 0b1000 = 8
       ^ j // XOR with j for example
           // 0b1000 ^ 0b0010 = 0b1010 = 10

最后你将该值分配给指向的地方a

a+= arr[i][j] ==0 && tfunc(i,j); 
    arr[i][j] ==0                // if the element [i][j] from arr == 0 return true
                     tfunc(i,j)  // return of tfunc
                  &&             // if both statements are !=0, results 
                                 // in true, else in false
a+=                              // a = a + true or false is equal to
                                 // a = a + 1    or 0
于 2016-12-16T10:01:18.147 回答