Потому что INT_MAX - это число, которое представлено только 1.для 32-разрядного типа int он представлен битовой последовательностью 11111111 11111111 11111111 11111111
.Теперь оператор &
проверяет, имеют ли оба числа значение 1 для некоторого индекса (например, если оба числа имеют значение 1 для индекса 5, результат будет иметь значение 1 для индекса 5).Если это так, результат будет иметь значение 1 в этом индексе, в противном случае он будет хранить значение 0 в этом индексе результата.
Так что, если вы считаете номер INT MAX - которыйопять же, это битовая последовательность 11111111 11111111 11111111 11111111
и номер 2, например, который представлен битовой последовательностью 00000000 00000000 00000000 00000010
.Только во 2-м наименьшем индексе есть 1 в обоих числах, поэтому только там результат будет иметь 1 и 0 везде.
Горизонтальная визуализация
11111111 11111111 11111111 11111111
&
00000000 00000000 00000000 00000010
=
00000000 00000000 00000000 00000010