# c - What is the logic behind the control statement 'if((i+j) & 1)'?

This program declares an 8x8 character array and then uses a loop to store the following data into the array(one character per array element). Then it prints this array to the screen:

BRBRBRBR

RBRBRBRB

BRBRBRBR

RBRBRBRB

BRBRBRBR

RBRBRBRB

BRBRBRBR

RBRBRBRB

The program works fine. However, I am having trouble understanding the logic behind the if statement:

``if((i+j) & 1)``

I don't understand how if adding i + j 'and' 1 is true set array to 'R' else set it to 'B'. This might have a rather obvious answer, but I am new to C. Can someone help clarify why this program works with this logic? Thank You!

``#include <stdio.h>#include <stdlib.h>int main(void){int i, j;char letter[8][8];for(i=0; i<8; i++) {for(j=0; j<8; j++) {//This if-statementif ((i+j) & 1)letter[i][j] = 'R';elseletter[i][j] = 'B';printf("%c" , letter[i][j]);}printf("\n");}return 0;}``

`(i+j) & 1` will evaluate to `true` when `i+j` is odd and `false` when `i+j` is even.

The `&` in that expression is the bitwise AND operator, not the logical AND operator.

The code would be so much more readable if written as:

``````int is_odd(int n)
{
return ((n&1) == 1);
}

...

if ( is_odd(i+j) )
``````

There's a pattern here - the last bit of the value is constantly flipped:

``````i = 0, j = 0 --> i + j = 0 --> 2'b00
i = 0, j = 1 --> i + j = 1 --> 2'b01
i = 0, j = 2 --> i + j = 2 --> 2'b10
...and so on
``````

The `&` operator then does a bit-wise `and` operation on the bits of the value:

``````//this evaluates to false, and 'B' is printed
2'b00 & 1 == 2'b00 & 2'b01 == 2'b(0&0)(0&1) == 2'b00
//this evaluates to true, and 'R' is printed
2'b01 & 1 == 2'b01 & 2'b01 == 2'b(0&0)(1&1) == 2'b01
``````