Para declararmos expressões em qualquer linguagem de programação precisamos utilizar os operadores. Os conceitos de expressões e operadores já foram vistos em Tutorial Portugol: Operadores e Tutorial C: Operadores. Em caso de dúvida é recomendada a leitura.

Nesta parte do tutorial vamos estudar os operadores fornecidos pela linguagem Lua.

Os seguintes operadores de atribuição estão disponível na linguagem Lua:

Tab. 1: Operadores de Atribuição
Operador Significado Exemplo
= Atribuição a = b
Sintaxe
nome_variave = valor

nome_variave1 = expressao

nome_variave1 = nome_variavel2
Exemplo 1
local x = 10
local y = 0

print(x,y)

x = y

print(x,y)
Saída
10	0
0	0

Diferente de outras linguagens como C/++, C#, Java e outras, Lua não possui os operadores acumulativos +=, -= e etc.

Operadores aritméticos foram visto em Portugol. Os seguintes operadores aritméticos estão disponível na linguagem Lua:

Tab. 2: Operadores de Aritméticos
Operador Significado Exemplo
+ Adição a+b
- Subtração a-b
* Multiplicação a*b
/ Divisão a/b
// Divisão inteira a//b
% Módulo a%b
^ Divisão a/b
- Unário de negação -a
Sintaxe
nome_variavel1 operador nome_variavel2

nome_variavel1 operador valor

valor1 operador valor2
Exemplo 2
local x = 4
local y = 2
local z = 0

z = x&y 
print(z)
z = x|y 
print(z)
z = x>>y 
print(z)
z = x<<y 
print(z)
z = ~x
print(z)
Saída
0
6
1
16
-5

Lua não possui os operadores unários (--) e (++) em outras linguagens como C/C++, C#, Java e outras.

Os seguintes operadores relacionais estão disponíveis na linguagem Lua. Os operadores abaixo retornam valores true ou false. Operadores relacionais podem ser vistos em Tutorial Portugol: Operadores aritméticos como funcionam.

Tab. 3: Operadores Relacionais
Operador Significado Exemplo
== Igual a == b
>= Maior ou igual a >= b
<= Maior ou igual a <= b
~= Diferente a ~=b
// Maior a>b
< Menor a<b
Sintaxe
nome_variavel1 operador nome_variavel2

nome_variavel1 operador valor

expressao1 operador expressao2
Exemplo 3
local x = 40 
local y = 20
local z = 0

z = x == y 
print(z)
z = x >= y 
print(z)
z = x <= y 
print(z)
z = x > y 
print(z)
z = x < y 
print(z)
z = x~=y 
print(z)
Saída
false
true
false
true
false
true

Os seguintes operadores lógicos estão disponíveis na linguagem Lua. Os operadores abaixo retornam valores true ou false. Operadores e tabelas verdades foram visto em Tutorial Portugol: Operadores Lógicos.

Tab. 4: Operadores Lógicos
Operador Significado Exemplo
and E lógico a and b
not Não lógico not a
or OR lógico a or b
Sintaxe: and e or
nome_variavel1 operador nome_variavel2

expressao1 operador expressao2

nome_variavel operador valor
Sintaxe: not
operador valor 

operador nome_variavel

operador expressao
Exemplo 4
local x = true
local y = false

z = x and y
print(z)
z = x or y 
print(z)
z = not y 
print(z) 
Saída
false
true
true

Os seguintes operadores bit-a-bit estão disponíveis na linguagem Lua. Esse operadores aplicam operações em cada bit de um valor resultando em 0 ou 1. O funcionamento básico pode ser visto em Tutorail C: Operadores bit-a-bit sendo a leitura recomendada.

Tab. 5: Operadores bit-a-bit
Operador Significado Exemplo
& E bit-a-bit a & b
| OR bit-a-bit a | b
~ Não bit-a-bit ~a
>> Desloca N bits à direita a>>b
<< Desloca N bits à esquerda a<<b
Sintaxe: & e |
nome_variavel1 operador nome_variavel2
nome_variavel operador valor
Sintaxe: >> e <<
nome_variavel operador bits_deslocamento ( valor, variavel ou expressao )
Sintaxe: ~
operador expressao
operador valor
operador nome_variavel
Exemplo 5
local x = 4
local y = 2
local z = 0

z = x&y 
print(z)
z = x|y 
print(z)
z = x>>y
print(z)
z = x<<y
print(z)
z = ~x
print(z) 
Saída
0
6
1
16
-5

Abaixo a tabela contendo outros registradores que não se encaixam nos grupos de operadores estudados anteriormente. Mais operadores serão adicionados em futuras atualizações deste tutorial.

Tab. 6: Outros operadores
Operador Significado Exemplo
.. Concatenação de string a..b
# Retorna tamanho de string ou vetor #a
[] Indexador de vetor/matriz v[1] --indice zero
Exemplo 6
local x = "Uma string "
local y = "lunática"
local z = x..y
local w = #z
Saída
Uma string lunática
20

Os operadores estudados acima possuem um precedência para a validação quando contidos em uma expressão. A lista de precedência de operadores abaixo foi ordenada da menor prioridade até a maior prioridade.

or
and
<     >     <=    >=    ~=    ==
|
~
&
<<    >>
..
+     -
*     /     //    %
not   #     -     ~
^
  1. 15/09/2025 - revisão 3 - Ajustes: pontuais, sintaxes, target de links internos e Ex. 1
  2. 12/09/2024 - revisão 2 - Correção em links Portugol e outros pequenos ajustes gramaticais
  3. 03/10/2023 - revisão 1 - Correção em referências e erros gramaticais
  4. 26/05/2023 - versão inicial