The & operator provides a mask that “cancels out” bits in the first depending if they’re set in the second parameter - so assume N is the number 17, that expressed in binary is 00010001, the number 1 in binary is 00000001, so masking the two together will “blank” the first set of bits, leaving you with N as 00000001.
Can you please explain why & operator performs masking?