Побитовые операции

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

Где применяются?

Побитовые операции широко применяются при работе с битовыми полями (флагами) и битовыми масками. Битовые поля позволяют максимально эффективно хранить некоторые состояния, имеющие только два значения: «включен» и «выключен». Access Control List (ACL) — хороший пример битового поля, использующийся для управления доступом к объекту. Например, в Linux и Mac OS каждый файл в системе имеет свой ACL, определяющий полномочия пользователя по чтению, записи или запуску файла. Битовые поля позволяют хранить несколько значений, не расходуя лишнюю память (по одному биту на каждое значение, вместо 4-х или 8-ми). А битовые маски (и побитовые операции), в свою очередь, используются для извлечения необходимых данных из битовых полей.

Довольно трудно обойтись без побитовых операций при реализации сетевой коммуникации. Побитовые операции здесь используются для проверки чек-сумм, определения битов окончания операции, для объеденения команд и данных, сериализации и т.д. и т.п.

Не получится не использовать побитовые операции и при реализации алгоритмов компресии и шифрования. Если взглянуть на любой алгоритм сжатия (например Deflate) или шифрования (например, AES), то мы увидим, что в описании довольно часто всплывают именно биты.

Однозначно существуют области программирования, в которых без побитовых операций просто невозможно обойтись. Сюда можно отнести программирование микроконтроллеров, взаимодействие с реальными устройствами, написание драйверов для них. Также сюда относится реализация программ, эмулирующих реальные устройства, такие,как эмуляторы CD-ROM, игровых приставок или виртуальных компьютеров.

Побитовые операции являются частым гостем в случаях, когда требуется использовать разного рода оптимизации и микрооптимизации кода. Банальный пример:  2 << 4 в большинстве случаев быстрее. чем Math.Pow(2, 5).

Само собой, на этом список не заканчивается, и его можно продолжить, но целью этой статьи не является описание всех возможных сфер применения побитовых операций.

Если вам кажется, что вы не столкнетесь с побитовыми операциями в повседневной работе, т.к. ваша сфера работы не входит в вышеописанные, то у нас для вас «плохие» новости. Встретиться с битовыми операциями можно где угодно, даже там, где, казалось бы, их быть вообще не должно. Но не стоит раньше времени паниковать. Не так страшен черт, как его малюют. Побитовые операции сами по себе довольно просты. И сейчас мы с ними разберемся, а заодно и закроем небольшую брешь в образовании.

Читать →

Как сделать игру на Unity. Урок 8: Физика. Применение силы

В уроке рассмотрена настройка физики в проекте. А так же:

  • Что такое физический материал и их настройка.
  • Основные параметры компонента Rigidbody.
  • Применение физических сил к игровым объектам.

Читать →

Как сделать игру на Unity. Урок 7: Звук в игре

Урок о добавлении звука в игру. В видео рассмотрен импорт звука и правильная настройка для сохранения баланса между производительностью и затратами памяти. Показано использование основных компонентов, работающих с аудио. А также показано, как включать тот или иной звук по необходимости, на примере изменения звука шагов в зависимости от поверхности.
Читать →

Как сделать игру на Unity. Урок 4: Настройка персонажа для анимации

Урок об импорте персонажа в Unity и настройке его для анимации. Пример работы с системой анимации Mecanim. Переходы по времени и параметрам, переключение параметров из скрипта. Перенос анимации из 3d пакетов в Unity. В видео показывается на примере как сделать анимацию ходьбы персонажа и как сделать, чтобы он ходил на месте.

Читать →

Как сделать игру на Unity. Урок 3: Настройки ввода

Урок о настройке устройств ввода (клавиатура, мышь, геймпад) в игровом движке Unity3D. Настройка осей, клавиш клавиатуры, кнопок мыши, геймпада, хода мыши и стиков. В видео настройки ввода разбираются на примере управления шариком посредством приложения к нему физических сил. Так же показано как сделать вращение платформы мышью или стиком.

Читать →

Как сделать игру на Unity. Урок 2: Создание игрового мира

В уроке рассматривается, как сделать игровой мир в Unity3D. Программное создание мира и миры на основе террейна. Так же из видео вы узнаете, как из скрипта добавить объект на сцену в Unity, как программно изменить текстуру на объекте. Будет показано как добавлять горы, впадины, деревья, или проще сказать, как создать ландшафт для своей игры. А так же мы рассмотрим настройки террейна. Читать →

Как сделать игру на Unity. Урок 1: Введение в разработку на Unity 5

Вступительный урок по игровому движку Unity, в котором мы познакомимся с интерфейсом редактора и подготовимся к созданию игр на Unity 5. В видео рассматривается:

  • меню редактора, для чего предназначен тот или иной пункт;
  • как добавлять стандартные примитивы, террейн, свет и другие игровые объекты на сцену;
  • что такое компоненты и как их добавлять к объектам в Unity;
  • как создать новый материал. Читать →

Отличия event.target и event.currentTarget

У многих новичков as3 возникает вопрос: в чем разница между свойствами target  и currentTarget  объекта события? А разница в следующем. Читать →

Жизненный цикл Spark компонентов Flex фреймворка и базовые правила наследования компонентов

Для правильной работы со Spark компонентами и создания собственных компонентов, необходимо иметь понятие о том, как и по каким правилам они работают. Сегодня мы  рассмотрим базовые принципы, без знания которых невозможно эффективно использовать этот мощный фреймворк.

Итак, жизненный цикл каждого компонента во Flex фреймворке проходит следующие этапы:

  • создание (construction);
  • конфигурация (configuration);
  • подключение/присоединение (attachment);
  • инициализация (initialization);
  • инвалидация (invalidation);
  • взаимодействие (interaction);
  • удаление (detachment);
  • сборка мусора (garbage collection).

Читать →