Момент полного круга книги: побитовые операторы в коде буквально реализуют те же гейты из блока 2 — просто применённые к каждому отдельному биту двоичного числа, а не к единственному проводу.
Логические операторы (&&, ||, глава 16) работают с целым значением как с единой истиной или ложью. Побитовые операторы работают с каждым отдельным битом двоичного представления числа независимо — как будто применяют логический гейт к каждой паре битов на одинаковой позиции отдельно.
Каждый бит результата — это И (глава 05) от соответствующих битов двух чисел на этой же позиции: 1И1=1, 1И0=0, 0И1=0, 0И0=0.
Та же логика, но операция ИЛИ (глава 06) применяется к каждой паре битов.
Прямое применение XOR (глава 09) к каждому биту — полезно для переключения (toggle) конкретных отдельных битов, не трогая остальные. Классический трюк — обмен значений двух переменных без временной переменной через тройное XOR, хотя на практике современные языки обычно предлагают более читаемые способы сделать то же самое.
Побитовое НЕ инвертирует каждый бит числа — но в большинстве языков результат выглядит неожиданно из-за способа представления отрицательных чисел в памяти (дополнительный код): ~5 в большинстве языков даёт не просто "перевёрнутые видимые биты", а −6. Углубляться в точный механизм представления отрицательных чисел здесь не будем — достаточно знать, что этот неожиданный результат — не ошибка, а нормальное следствие внутреннего устройства представления чисел, часто вызывающее удивление у тех, кто впервые с этим сталкивается.
Сдвиг влево (<<) сдвигает все биты числа влево — эквивалентно умножению
на 2 за каждый сдвиг. Сдвиг вправо (>>) сдвигает вправо — эквивалентно
делению на 2 с отбрасыванием остатка.
Хранение нескольких независимых логических настроек эффективно в одном целом числе — каждый бит представляет отдельный флаг "включено/выключено". Классический реальный пример — права доступа к файлам в Unix-подобных системах буквально построены именно на этом принципе: отдельные биты кодируют право чтения, записи и выполнения.
Извлечение отдельных компонентов (красный, зелёный, синий) из упакованного в одно число цветового значения — типичная задача, решаемая комбинацией побитового И (для выделения нужных битов) и сдвигов (для перемещения их в нужную позицию).
Побитовые И, ИЛИ, XOR в коде — не метафора и не аналогия гейтов блока 2, а буквально та же самая логика, просто выполняемая программно сразу для всех битов числа параллельно, вместо физического гейта, обрабатывающего один провод. Компьютер внутри действительно использует физические логические элементы для выполнения этой самой операции на аппаратном уровне.
Следующая глава — условные конструкции if/else как прямое практическое применение всей логики этой книги в структуре реальной программы.
Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.