Operatori pe Biți în Lua 5.4: &, |, ~, >>, << și Măști Binare în Lua

Ghid complet pentru operațiile pe biți în Lua 5.4: operatorii AND (&), OR (|), XOR (~), NOT (~), deplasare pe biți (<<, >>) și utilizarea măștilor binare pentru permisiuni și protocoale.

Sintaxă
a & b; a | b; a ~ b; ~a; a << 2; a >> 1

Începând cu versiunea Lua 5.3 și rafinat în 5.4, Lua include operatori nativi pe biți pentru întregi pe 64 de biți. Aceștia permit manipularea directă a flag-urilor de memorie, criptografie, parsarea pachetelor de rețea și calculul rapid al măștilor binare.

Operatorii pe biți fundamentali în Lua 5.4
local a = 0x0F  -- binar: 0000 1111 (15 în zecimal)
local b = 0x33  -- binar: 0011 0011 (51 în zecimal)

-- 1. AND pe biți (&):
local si = a & b
print(string.format("AND: 0x%02X (%d)", si, si))     -- 0x03 (0000 0011)

-- 2. OR pe biți (|):
local sau = a | b
print(string.format("OR:  0x%02X (%d)", sau, sau))   -- 0x3F (0011 1111)

-- 3. XOR pe biți (~ unar sau binar):
local sauExclusiv = a ~ b
print(string.format("XOR: 0x%02X (%d)", sauExclusiv, sauExclusiv)) -- 0x3C

-- 4. Negare binară NOT (~ ca operator unar):
local negat = ~0
print("NOT pe 0 (toți biții 1):", negat) -- -1

-- 5. Deplasare la stânga (<<) și la dreapta (>>):
local val = 4 -- binar: 0000 0100
print("Deplasare stânga 2 biți (înmulțire cu 4):", val << 2) -- 16
print("Deplasare dreapta 1 bit (împărțire cu 2):", val >> 1)  -- 2
Sistem de permisiuni tip UNIX implementat cu măști binare
local PERM_READ    = 1 << 0 -- 1 (001)
local PERM_WRITE   = 1 << 1 -- 2 (010)
local PERM_EXECUTE = 1 << 2 -- 4 (100)

-- Acordarea drepturilor de READ și WRITE:
local permisiuniUtilizator = PERM_READ | PERM_WRITE

-- Verificarea dacă utilizatorul are drept de READ:
local poateCiti = (permisiuniUtilizator & PERM_READ) ~= 0
print("Utilizatorul poate citi?", poateCiti) -- true

-- Verificarea dacă utilizatorul are drept de EXECUTE:
local poateExecuta = (permisiuniUtilizator & PERM_EXECUTE) ~= 0
print("Utilizatorul poate executa?", poateExecuta) -- false

-- Revocarea dreptului de WRITE:
permisiuniUtilizator = permisiuniUtilizator & (~PERM_WRITE)
print("Are drept de scriere după revocare?", (permisiuniUtilizator & PERM_WRITE) ~= 0) -- false