Битовые операции представляют собой мощный инструмент, который можно использовать для манипуляций с данными на уровне отдельных битов. Lua, как язык программирования, предоставляет несколько операторов и функций для работы с битами. Давайте рассмотрим некоторые из них.
Операторы:
1. Побитовое И (&)
Побитовое И применяется к двум операндам и возвращает результат, который содержит единицы только в тех позициях, где оба операнда содержат единицы. Например:
«`lua
local result = 7 & 3 — результат: 3 (0b011 & 0b001 = 0b001)
«`
2. Побитовое ИЛИ (|)
Побитовое ИЛИ применяется к двум операндам и возвращает результат, который содержит единицы в тех позициях, где хотя бы один из операндов содержит единицу. Например:
«`lua
local result = 7 | 3 — результат: 7 (0b011 | 0b001 = 0b011)
«`
3. Побитовое исключающее ИЛИ (~)
Побитовое исключающее ИЛИ применяется к двум операндам и возвращает результат, который содержит единицы только в тех позициях, где один из операндов содержит единицу, но не оба. Например:
«`lua
local result = 7 ~ 3 — результат: 4 (0b011 ^ 0b001 = 0b010)
«`
4. Побитовый сдвиг влево (<<)
Побитовый сдвиг влево применяется к операнду и сдвигает его биты на указанное количество позиций влево. Например:
«`lua
local result = 7 << 1 — результат: 14 (0b011 <>)
Побитовый сдвиг вправо применяется к операнду и сдвигает его биты на указанное количество позиций вправо. Например:
«`lua
local result = 7 >> 1 — результат: 3 (0b011 >> 1 = 0b001)
«`
Функции:
Lua также предоставляет несколько функций, которые могут быть использованы для манипуляций с битами:
1. bit.band(a, b, …)
Функция bit.band возвращает побитовое И операндов a, b и т.д. Например:
«`lua
local result = bit.band(7, 3) — результат: 3 (0b011 & 0b001 = 0b001)
«`
2. bit.bor(a, b, …)
Функция bit.bor возвращает побитовое ИЛИ операндов a, b и т.д. Например:
«`lua
local result = bit.bor(7, 3) — результат: 7 (0b011 | 0b001 = 0b011)
«`
3. bit.bxor(a, b, …)
Функция bit.bxor возвращает побитовое исключающее ИЛИ операндов a, b и т.д. Например:
«`lua
local result = bit.bxor(7, 3) — результат: 4 (0b011 ^ 0b001 = 0b010)
«`
4. bit.lshift(a, b)
Функция bit.lshift возвращает побитовый сдвиг числа a на b позиций влево. Например:
«`lua
local result = bit.lshift(7, 1) — результат: 14 (0b011 <> 1 = 0b001)
«`
Это лишь некоторые из возможностей, которые предоставляются для манипуляций битовыми операциями в Lua. Использование данных операторов и функций может быть полезным в определенных задачах, требующих работу на более низком уровне с данными.