Битовые операции

Простые типы / Числа / Integer

-- In binary: a = 0101, b = 0110
local a = 5
local b = 6

-- And (0100)
local c1 = a & b
-- c1 = 4
-- Or (0111)
local c2 = a | b
-- c2 = 7
-- Xor is ~ between two operands (0011)
local c3 = a ~ b
-- c3 = 3
-- Shift right (0010)
local c4 = a >> 1
-- c4 = 2
-- Shift left (1100)
local c5 = b << 1
-- c5 = 12
-- Bits inversion is ~ before one operand
local c6 = ~b
-- c6 = -7
-- A mask keeps 8 bits (11111001)
local c7 = ~b & 0xFF
-- c7 = 249

-- Trap: ^ is power, not xor
local power = a ^ b
-- power = 15625.0

-- A float with a whole value is accepted
local whole = 5.0 & 1
-- whole = 1

print("c1 = " .. c1)
print("c2 = " .. c2)
print("c3 = " .. c3)
print("c4 = " .. c4)
print("c5 = " .. c5)
print("c6 = " .. c6)
print("c7 = " .. c7)
print("power = " .. power)
print("whole = " .. whole)

-- A float with a fraction is an error
local ok, err = pcall(function()
  return 5.5 & 1
end)
-- ok = false
-- err = main.lua:47: number has no integer
-- representation
print("ok = " .. tostring(ok))
print("err = " .. err)