Operadores e expressões
Uma expressão é uma receita para calcular um valor. Vamos aprender os ingredientes.
Operadores aritméticos
Os clássicos das contas. Funcionam exatamente como na matemática:
- + (soma): 10 + 3 = 13
- - (subtração): 10 - 3 = 7
- * (multiplicação): 10 * 3 = 30
- / (divisão inteira): 10 / 3 = 3
- MOD (resto da divisão): 10 MOD 3 = 1
ATENÇÃO
Divisão é sempre inteira
CSX trabalha apenas com números inteiros (não há ponto flutuante neste volume). 10 / 3 dá 3, e o resto vai para o MOD. Se você precisar saber o resto, use os dois operadores: o quociente é a parte inteira, e MOD é o que sobrou.
Operadores de comparação
Comparam dois valores e produzem um resultado BOOL (TRUE se a comparação é verdadeira, FALSE caso contrário):
- = (igual a): 5 = 5 (TRUE)
- <> (diferente de): 5 <> 7 (TRUE)
- < (menor que): 3 < 5 (TRUE)
- <= (menor ou igual a): 5 <= 5 (TRUE)
- > (maior que): 10 > 5 (TRUE)
- >= (maior ou igual a): 5 >= 5 (TRUE)
DICA
Diferente é <>
Diferente de muitas linguagens modernas, CSX usa <> (menor maior) para "diferente". É herança do BASIC clássico. Não use != nem == — vai dar erro.
Operadores lógicos
Combinam valores BOOL para formar condições mais complexas:
- AND — verdadeiro só se ambos os lados forem verdadeiros.
- OR — verdadeiro se pelo menos um for verdadeiro.
- NOT — inverte: NOT TRUE vira FALSE.
- XOR — verdadeiro se exatamente um for verdadeiro.
USES SCREEN 1
DIM idade AS BYTE = 18
DIM tem_carteira AS BOOL = TRUE
' Pode dirigir se tem 18 anos OU MAIS E tem carteira
DIM pode AS BOOL
pode = (idade >= 18) AND tem_carteira
Precedência: quem vem primeiro
Em 2 + 3 * 4 o resultado é 14, não 20. É a regra clássica: multiplicação e divisão antes da soma e subtração. A ordem completa, do que vem primeiro para o que vem depois:
- () parênteses (mais alto)
- NOT negação
- *, /, MOD, AND (bit-a-bit)
- +, -, OR, XOR (bit-a-bit)
- =, <>, <, <=, >, >=
- AND, OR (lógicos - mais baixo)
DICA
Na dúvida, use parênteses
Não tente memorizar a tabela inteira. Quando a expressão ficar complexa, use parênteses generosamente: (a + b) * (c - d) é muito mais legível que a + b * c - d, mesmo que o compilador entenda os dois.
Operações bit-a-bit
Em jogos para MSX1, é comum manipular bits diretamente — para máscaras de cor, leitura de teclas, controle do VDP. CSX oferece operadores específicos:
- AND bit-a-bit — apaga bits selecionados (máscara).
- OR bit-a-bit — acende bits selecionados.
- XOR bit-a-bit — inverte bits selecionados.
- SHL n — desloca para a esquerda (multiplica por 2 cada vez).
- SHR n — desloca para a direita (divide por 2 cada vez).
USES SCREEN 1
DIM cor AS BYTE = 15 ' branco (1111)
DIM mascara AS BYTE = 12 ' (1100)
DIM r1 AS BYTE
r1 = cor AND mascara ' = 12 (1100): só bits altos sobram
r1 = cor OR 16 ' = 31 (11111): acende o bit 5
r1 = cor XOR 15 ' = 0 : inverte todos os bits baixos
r1 = 1 SHL 4 ' = 16 (10000): 1 deslocado 4 posições
ATENÇÃO
AND/OR têm dois sentidos!
Quando os dois lados de AND são BOOL, ele faz comparação lógica. Quando os dois lados são BYTE/WORD/INT, ele faz operação bit-a-bit. É o tipo dos operandos que decide. Se você misturar, o compilador vai promover ambos para o tipo maior e fazer bit-a-bit.
Exercícios
- 4.1 — Calcule e mostre o resultado de (7 * 6) MOD 5.
- 4.2 — Sem usar a calculadora, qual o valor de 2 SHL 8? Confirme rodando.
- 4.3 — Crie duas variáveis BYTE com valores 12 e 10. Mostre o resultado dos operadores: AND, OR, XOR, +, -.
Resumo do capítulo
- Aritméticos: + - * / MOD (divisão sempre inteira).
- Comparação: = <> < <= > >= (resultam em BOOL).
- Lógicos: AND / OR / NOT / XOR (em BOOL ou bit-a-bit).
- Bit-a-bit: AND OR XOR + SHL/SHR para deslocar.
- Use parênteses sem medo — clareza vale mais que economia.