Parte I – Sistemas numéricos – Bases numéricas
- Operações lógicas ou booleanas
- Álgebra de Boole e Funções Lógicas
- Portas Lógicas
Mais artigos em desenvolvimento…
Introdução
A expressão “booleana” ou “booleano” é uma tradução directa do Inglês “boolean”, nome que surgiu de George Boole, que foi o primeiro a introduzir um sistema algébrico lógico no século XIX.
Para começar, vamos definir as chamadas “tabelas da verdade” e em condições de verdadeiro ou falso, muito usadas na matemática, em equações e inequações, e intervalos válidos para expressões. Não vamos aprofundar esta questão, estudada em matemática, e vamos directamente à sua aplicação na informática. Porém, analisemos as operações mais usuais – “E”, “OU”, “OU-exclusivo” e negação – com as letras V e F a representarem Verdade e Falso, respectivamente.
"E" | F | V |
---|---|---|
F | F | F |
V | F | V |
"OU" | F | V |
---|---|---|
F | F | V |
V | V | V |
"OUx" | F | V |
---|---|---|
F | F | V |
V | V | F |
"NEG" | - |
---|---|
F | V |
V | F |
Ou seja, podemos exprimir estas tabelas como:
- Verdade E Verdade = Verdade
- Verdade E Falso = Falso
- Falso E Verdade = Falso
- Falso E Falso = Falso
- Verdade OU Verdade = Verdade
- Verdade OU Falso = Verdade
- Falso OU Verdade = Verdade
- Falso OU Falso = Falso
- Verdade OU-exclusivo (OUx) Verdade = Falso
- Verdade OUx Falso = Verdade
- Falso OUx Verdade = Verdade
- Falso OUx Falso = Falso
- Negação de Verdade = Falso
- Negação de Falso = Verdade
Usando agora, uma representação mais “informática”, usemos as palavras em Inglês:
- “AND” para “E”
- “OR” para “OU”
- “XOR” (de eXclusive OR) para “OU-exclusivo”
- “NOT” para a negação
E ainda, os bits 1 para Verdade e 0 para Falso.
As tabelas ficam com a forma:
AND | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
OR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
XOR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
NOT | - |
---|---|
0 | 1 |
1 | 0 |
Matematicamente, também podemos afirmar que estas operações, em termos de conjuntos, representam:
- AND (E) – Intercepção ( símbolo ˄ )
- OR (OU) – União ( símbolo ˅ )
- NOT (Negação) – Exclusão ( símbolo ¬ )
Podemos também verificar uma equivalência interessante, em binário, com as operações AND e XOR e as operações aritméticas de multiplicar e somar. Vejamos:
AND e a multiplicação:
AND | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
× | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
Podemos afirmar que, ao nível de um bit, a multiplicação é equivalente à operação lógica AND.
E quanto ao XOR e a soma:
XOR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
+ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
Lembre-se que 1 + 1 é 0 “e vai 1”! Podemos também afirmar que, ao nível de um bit, a soma é equivalente à operação lógica “XOR”.
Operações com mais do que um bit
Estas operações lógicas também podem ser efectuadas com um maior número de bits. Neste caso, fazemos a operação bit a bit. Nos exemplos, coluna a coluna.
Exemplos:
1101 AND 0111 = ?
1 | 1 | 0 | 1 | |
AND | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 1 |
1101 AND 0111 = 0101
1110 OR 0110 = ?
1 | 1 | 1 | 0 | |
OR | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 0 |
1110 OR 0110 = 1110
1011 XOR 0011 = ?
1 | 0 | 1 | 1 | |
XOR | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 0 |
1011 XOR 0011 = 1000
Exemplo prático
Para terminar, vejamos um exemplo prático destes operadores.
Imagine-se que tem um registo de um controlador de 8 bits que controla o “ligar” ou “desligar” de determinados dispositivos. Imagine ainda que o bit 3 (lembre-se que da direita para a esquerda podemos ter os bits numerados de 0 a 7) controla o altifalante do PC e o bit 2 controla um 2º écran.
Considere-se ainda que temos o registo com os seguintes valores:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Val. | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
Temos o bit 3 (altifalante – a verde) a 0, ou seja, o altifalante está desligado, e o bit 2 (2º écran – a amarelo) a 1, ou seja, o 2º écran está ligado.
Pretende-se fazer uma operação de ligar ambos os dispositivos, independentemente se já estiverem ligados ou não. Para tal, usamos o operador “OR” em que 0 é o elemento neutro e 1 é o elemento “absorvente”:
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | |
OR | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
Repare que, na primeira linha temos os bits do registo e na segunda linha os bits da operação. Repare ainda que todos os bits estão a 0, excepto os bits 3 e 2 que estão a 1. Assim, garantimos que, com um bit a 0, não alteramos o estado dos restantes bits do registo! Só queremos activar os bits 3 e 2, daí o esses bits da operação estarem a 1. De facto, ao observarmos a linha 3, que representa o novo estado do registo, apenas os bits 3 e 2 foram forçados a ficar a 1 e os restantes mantêm o mesmo valor!
Recuemos ao estado inicial do registo. Agora, o que se pretende, é forçar o desligar destes dispositivos, independentemente de já estarem desligados ou não. Neste caso, usamos o operador “AND” em que 1 é elemento neutro e 0 é o elemento “absorvente”:
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | |
AND | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
Agora, repare-se que na segunda linha, os bits da operação estão todos a 1 e, os bits 3 e 2, que queremos desligar, estão a 0. Neste caso, garantimos que só estamos a desactivar os bits 3 e 2! Os restantes, mantém o mesmo valor!
Por fim, e voltando a tomar os valores iniciais do registo, considere-se que pretendemos “inverter” o estado dos dispositivos de ligado para desligado e vice-versa! Para este caso, usamos o operador “XOR” em que o 0 é elemento neutro e o 1 é o elemento “inversor”!
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | |
XOR | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
Repare-se que, à semelhança do operador “OR”, os bits a 0 da operação mantém os respectivos bits do registo iguais. Por outro lado, ao ter os bits 3 e 2, da operação, a 1, estamos a inverter os seus valores. Assim, o altifalante, que estava desligado, passa a estar ligado e o 2º écran, que estava ligado, passa a estar desligado!
O caso do 2º écran é um pouco “forçado”. Mas, na realidade, existe um controlador em que um dos bits liga ou desliga o altifalante do PC (PIT – Programmable Interval Timer), pelo que estas operações podem acontecer algumas vezes. No passado, quando não haviam placas de som, as melodias eram controladas por um registo que definia a frequência do som do altifalante e ligava-se ou desligava-se o bit 1 do PIT que controlava o altifalante. (Que na realidade era um porto de Input/Output desse controlador, mas tal ficará para falarmos mais tarde).
Em todos estes casos, os bits usados nas operações são, por vezes, denominados de máscaras.
Este tema será abordado com maior detalhe num tópico futuro de circuitos lógicos…
Este artigo foi escrito com a antiga grafia.