Я не понимаю как 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;
}
заранее спасибо
*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
Других решений пока нет …