Оператор & является побитовым оператором.Дополнительная информация здесь .
В основном, если мы рассмотрим счетчик как двоичный файл:
counter = 0b0010
1 << j -> with j = 0
j будет позицией, которую вы хотите оценить с помощью 1.
Следовательно, в этом случае оператор IF не будет выполнен, поскольку оператор AND вернет 0.
Но с:
counter = 0b0010
1 << j -> with j = 1
Оператор IF будет выполнен, потому чтооператор AND вернет 1.
Чтобы понять немного больше, вы можете поиграть со следующим фрагментом кода и изменить значения счетчика и j:
counter = 0b0100
j = 2
if((counter & (1 << j)) > 0):
print("True")
else:
print("False")