tariel.ge › Полезное: бесплатные книги › Логические элементы: от электроники до…Бесплатно · автор Тариел Бежанидзе
← Учебник по логическим элементам ЛИСТ 17БЛОК 4 — ЛОГИКА В ПРОГРАММИРОВАНИИРЕВ. 1
Глава 17 · Логика в программировании

Побитовые операции: AND, OR, XOR, NOT, сдвиги

Момент полного круга книги: побитовые операторы в коде буквально реализуют те же гейты из блока 2 — просто применённые к каждому отдельному биту двоичного числа, а не к единственному проводу.

Ключевое отличие от главы 16

Логические операторы (&&, ||, глава 16) работают с целым значением как с единой истиной или ложью. Побитовые операторы работают с каждым отдельным битом двоичного представления числа независимо — как будто применяют логический гейт к каждой паре битов на одинаковой позиции отдельно.

Побитовое И (&)

  1100  (12)
& 1010  (10)
———————
  1000  (8)

Каждый бит результата — это И (глава 05) от соответствующих битов двух чисел на этой же позиции: 1И1=1, 1И0=0, 0И1=0, 0И0=0.

Побитовое ИЛИ (|)

  1100  (12)
| 1010  (10)
———————
  1110  (14)

Та же логика, но операция ИЛИ (глава 06) применяется к каждой паре битов.

Побитовое исключающее ИЛИ (^)

Прямое применение XOR (глава 09) к каждому биту — полезно для переключения (toggle) конкретных отдельных битов, не трогая остальные. Классический трюк — обмен значений двух переменных без временной переменной через тройное XOR, хотя на практике современные языки обычно предлагают более читаемые способы сделать то же самое.

Побитовое НЕ (~) — неожиданная ловушка

Результат не всегда выглядит интуитивно

Побитовое НЕ инвертирует каждый бит числа — но в большинстве языков результат выглядит неожиданно из-за способа представления отрицательных чисел в памяти (дополнительный код): ~5 в большинстве языков даёт не просто "перевёрнутые видимые биты", а −6. Углубляться в точный механизм представления отрицательных чисел здесь не будем — достаточно знать, что этот неожиданный результат — не ошибка, а нормальное следствие внутреннего устройства представления чисел, часто вызывающее удивление у тех, кто впервые с этим сталкивается.

Битовые сдвиги

Сдвиг влево (<<) сдвигает все биты числа влево — эквивалентно умножению на 2 за каждый сдвиг. Сдвиг вправо (>>) сдвигает вправо — эквивалентно делению на 2 с отбрасыванием остатка.

5 << 1 = 10 // 5 × 2
20 >> 2 = 5 // 20 ÷ 4 (два сдвига = деление на 4)

Практическое применение 1: битовые флаги

Хранение нескольких независимых логических настроек эффективно в одном целом числе — каждый бит представляет отдельный флаг "включено/выключено". Классический реальный пример — права доступа к файлам в Unix-подобных системах буквально построены именно на этом принципе: отдельные биты кодируют право чтения, записи и выполнения.

Практическое применение 2: работа с цветом

Извлечение отдельных компонентов (красный, зелёный, синий) из упакованного в одно число цветового значения — типичная задача, решаемая комбинацией побитового И (для выделения нужных битов) и сдвигов (для перемещения их в нужную позицию).

Полный круг с блоком 2

Побитовые И, ИЛИ, XOR в коде — не метафора и не аналогия гейтов блока 2, а буквально та же самая логика, просто выполняемая программно сразу для всех битов числа параллельно, вместо физического гейта, обрабатывающего один провод. Компьютер внутри действительно использует физические логические элементы для выполнения этой самой операции на аппаратном уровне.

Что дальше

Следующая глава — условные конструкции if/else как прямое практическое применение всей логики этой книги в структуре реальной программы.

Глава17 — Побитовые операции
Блок4 — Логика в программировании
Далее18 — Условные конструкции if/else
СтатусГотово · рев. 1
Предыдущая глава ← 16 · Логические операторы в разных языках Следующая глава 18 · Условные конструкции if/else →

Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.