Почему INT_MAX & x = x?

Выполняя вопрос ANDROUND о spoj, я хотел написать функцию запроса для моего дерева сегментов. В ситуации, когда l, r находятся вне диапазона, мне нужно вернуть число, которое при выполнении операции BITWISE AND не изменит ответ.

В одном из решений я заметил, что побитовое И любого числа с INT_MAX вернет нам само число.

Почему это так?

1 ответ

Решение

Потому что 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

Другие вопросы по тегам