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

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

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

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

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

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

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

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

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

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

Читать →

Unity для новичков. Простая камера от третьего лица. Часть 1

Доброго времени суток!
Сегодня мы рассмотрим пример создания простой игровой камеры от третьего лица в Unity.

Читать →

Unity для новичков. Делаем зомби шутер. Часть 4

Введение в разработку на игровом движке Unity — практикум. Часть 4.
Это последний видеоурок из серии — завершаем проект. Улучшаем управление персонажем, добавляя движение камеры по вертикали. Создаем точки респауна зомби и генерируем их с уменьшением интервала. Заканчиваем UI: реализуем подсчет очков, используем делегат (Delegates) для обновления интерфейса, скрываем и фиксируем курсор мыши. Делаем билд игры.

Читать →

Unity для новичков. Делаем зомби шутер. Часть 3

Введение в разработку на игровом движке Unity — практикум. Часть 3.
Простое управление персонажем на основе компонента Character Controller. Работа с устройствами ввода. Что такое класс Input и оси управления и их использование для перемещения, поворота персонажа и прочих элементов управления.

Что такое Raycast и его использование на примере стрельбы. Использование информации о точке пересечения Raycast с объектом для добавления декалей и применения физической силы к игровым объектам. Добавление звуков в игру. Анимации, атака и смерть зомби.
Читать →

Unity для новичков. Делаем зомби шутер. Часть 2

Введение в разработку на игровом движке Unity — практикум. Часть 2.
Введение в работу с пользовательским интерфейсом в Unity. Как добавлять и манипулировать элементами пользовательского интерфейса, такими, как текст, изображение и кнопки. Что такое точки привязки (якоря) и точки начала координат (Pivot) элементов UI. Переход между сценами и выход из приложения по нажатию на графические кнопки.
Затрагивается работа с навигацией (поиском пути) в Unity. Запекание навигации, добавление и настройка агента.
И в заключение второго урока мы напишем небольшой скрипт поведения врагов и познакомимся с корутинами (Coroutine).
Читать →

Unity для новичков. Делаем зомби шутер. Часть 1

Введение в разработку на игровом движке Unity — практикум. Рассматривается как создать проект. Навигация в редакторе Unity и управление камерой основного вьюпорта. Как импортировать сторонние ресурсы в проект. Настройка персонажа гуманоидного типа для анимации. Базовые возможности системы анимации Mecanim. Даны примеры использования дерева смешивания и анимации по маске. Данное видео является вступительным в серии по созданию простого зомби-шутера.

Читать →