Почему INT_MAX & x = x? - PullRequest
       47

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

0 голосов
/ 12 февраля 2019

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

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

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

1 Ответ

0 голосов
/ 12 февраля 2019

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

...