Operadores lógicos
Aprenda sobre a 4ª categoria de operadores. Veja como os operadores lógicos são usados para criar expressões condicionais complexas.
22/10/2023
Antes de aprender sobre os operadores lógicos, primeiramente é imprescindível que você já saiba o que são operadores relacionais.
Se você ainda não sabe o que são operadores relacionais, certamente você deve ler este artigo em que explicamos com detalhes sobre o assunto.
Bom! Mas vamos ao que interessa!
O que são os operadores lógicos?
Os operadores lógicos representam a 4ª categoria de operadores da programação e, em resumo, são usados para criar expressões condicionais complexas.
As principais linguagens de programação utilizam 3 operadores lógicos:
&&
que representa a conjunção lógica ‘e’.
||
que representa a disjunção lógica ‘ou’
!
que representa a negação lógica ‘não’.
Entretanto, é importante observar que em algumas linguagens de programação esses operadores recebem símbolos diferentes.
Na linguagem Python, por exemplo, os símbolos dos operadores são usados com a sua representação escrita por extenso em inglês:
and
que representa a conjunção lógica ‘e’.
or
que representa a disjunção lógica ‘ou’
not
que representa a negação lógica ‘não’.
Esses operadores são usados com o intuito de criar expressões do tipo verdadeiro (TRUE) ou falso (FALSE), mas o seu funcionamento é um pouquinho mais complexo.
Uso do operador lógico &&
Em primeiro lugar, você precisa entender que esses operadores, geralmente, são utilizados em conjunto com os operadores relacionais.
Só para exemplificar, imagine que queremos criar um algoritmo para verificar se uma pessoa é maior de idade. Nesse sentido, teríamos o código abaixo:
1.if(idade > 18){
2. println("Você pode acessar o sistema!");
3.}
Agora imagine que, além de verificar se a pessoa é maior, queremos também verificar se o seu nível de acesso é maior que o valor 10. A expressão condicional para essa verificação seria algo como:
nivelAcesso > 10
Podemos colocar isso no algoritmo usando o operador de conjunção lógica ‘e’ (o operador &&), de tal forma que esse operador vai juntar as expressões “idade > 18” e “nivelAcesso > 10” em uma única expressão complexa.
Portanto, teríamos o código abaixo.
1.if(idade > 18 && nivelAcesso > 10){
2. println("Você pode acessar o sistema!");
3.}
Observe que o operador lógico && junta as expressões “idade > 18” e “nivelAcesso > 10”. Em outras palavras, a mensagem na linha 2 (do código acima) será impressa apenas se ambas as condições forem verdadeiras!
Podemos generalizar o uso dos operadores lógicos com o seguinte modelo:
[esq.] oper. relacional [dir.] OPERADOR LÓGICO [esq.] oper. relacional [dir.];
Dessa forma, você consegue observar que um operador lógico tem o objetivo de juntar duas expressões distintas (que usam operadores relacionais) e montar uma expressão condicional mais complexa.
Regras do operador &&
Certamente, você já entendeu que o operador lógico && junta duas expressões condicionais. No entanto, é importante mostrar como ele funciona de forma detalhada.
Exemplo 1
Observe no algoritmo abaixo que as variáveis idade e nivelAcesso são inicializadas com os valores 10 e 15, respectivamente:
1.int idade = 10;
2.int nivelAcesso = 15;
3.if(idade > 18 && nivelAcesso > 10){
4. println("Você pode acessar o Sistema!");
5.}
Como resultado disso, observe que, na linha 3, a expressão “idade > 18” retornará um valor falso e que a expressão “nivelAcesso > 10” retornará um valor verdadeiro.
3.if(idade > 18 && nivelAcesso > 10){
Dessa forma, pelo fato de que uma das duas é falsa, a expressão como um todo é avaliada como falsa. Como resultado, o comando na linha 4 não será executado.
1.int idade = 10;
2.int nivelAcesso = 15;
3.if(idade > 18 && nivelAcesso > 10){// toda a expressão é falsa
4. println("Você pode acessar o Sistema!");// não executa
5.}
Exemplo 2
Agora observe o mesmo algoritmo com os valores diferentes para as variáveis idade e nivelAcesso:
1.int idade = 25;
2.int nivelAcesso = 9;
3.if(idade > 18 && nivelAcesso > 10){
4. println("Você pode acessar o Sistema!");
5.}
Como resultado, observe que (na linha 3) a expressão “idade > 18” retornará um valor verdadeiro e que a expressão “nivelAcesso > 10” retornará um valor falso.
3.if(idade > 18 && nivelAcesso > 10){
Da mesma maneira que o exemplo 1, pelo fato de que uma das duas é falsa, a expressão como um todo é avaliada como falsa.
1.int idade = 25;
2.int nivelAcesso = 9;
3.if(idade > 18 && nivelAcesso > 10){// toda a expressão é falsa
4. println("Você pode acessar o Sistema!");// não executa
5.}
Tabela verdade para o operador lógico &&
A expressão que utiliza o operador lógico && somente é avaliada como verdadeira caso ambas as expressões esquerda e direita forem verdadeiras.
Abaixo segue a tabela verdade com todas as combinações possíveis de resultados Verdadeiro e Falso para o uso do operador &&.
expressão esq. | operador | expressão dir. | resultado |
---|---|---|---|
V | && | V | V |
V | && | F | F |
F | && | V | F |
F | && | F | F |
Uso do operador lógico ||
Conhecido como operador de disjunção lógica ‘ou’, o || funciona de maneira bem parecida ao operador &&. A diferença está apenas na regra de avaliação.
Observe no exemplo abaixo que as variáveis idade e nivelAcesso são inicializadas com os valores 10 e 15 (linhas 1 e 2) e que o operador lógico que utilizamos é o || (linha 3).
1.int idade = 10;
2.int nivelAcesso = 15;
3.if(idade > 18 || nivelAcesso > 10){
4. println("Você pode acessar o Sistema!");
5.}
Como resultado, observe que, na linha 3, a expressão “idade > 18” retornará um valor falso, e que a expressão “nivelAcesso > 10” retornará um valor verdadeiro.
3.if(idade > 18 || nivelAcesso > 10){
Dessa forma, pelo fato de que uma das duas é verdadeira, a expressão como um todo é avaliada como verdadeira.
1.int idade = 10;
2.int nivelAcesso = 15;
3.if(idade > 18 || nivelAcesso > 10){// toda a expressão é verdadeira
4. println("Você pode acessar o Sistema!");// executa
5.}
É isso mesmo! Para o operador de disjunção lógica || basta apenas que uma das duas expressões (esquerda ou direita) seja verdadeira.
Em outras palavras: ou uma ou outra precisa ser verdadeira para que toda a expressão seja verdadeira.
Tabela verdade para o operador lógico ||
Certamente, você já entendeu que a expressão que utiliza o operador lógico || é avaliada como verdadeira caso apenas uma das duas expressões esquerda ou direita forem verdadeiras.
Abaixo segue a tabela verdade com todas as combinações possíveis de resultados Verdadeiro e Falso para o uso do operador ||.
expressão esq. | operador | expressão dir. | resultado |
---|---|---|---|
V | || | V | V |
V | || | F | V |
F | || | V | V |
F | || | F | F |
Uso do operador lógico !
Conhecido como operador de negação lógica ‘não’, o ! funciona como um inversor do resultado lógico.
Vamos explicar.
Com toda a certeza, você consegue observar no código abaixo que a expressão lógica “idade >18” (linha 2) retorna um valor falso. Como resultado, o comando na linha 3 não será executado.
1.int idade = 10;
2.if(idade > 18){// expressão é falsa
3. println("Você pode acessar o Sistema!");// não executa
4.}
Podemos usar o operador de negação lógica ! para inverter o resultado da expressão da seguinte forma:
!(idade > 18)
Colocamos a expressão lógica entre parênteses e inserimos o operador ! antes da expressão.
Assim sendo, podemos inserir o operador ! no algoritmo da seguinte maneira:
1.int idade = 10;
2.if( !(idade > 18) ){
3. println("Você pode acessar o Sistema!");
4.}
Dessa forma, o valor lógico da expressão “idade > 18” é invertido pelo operador ! e a declaração condicional passa a retornar o valor verdadeiro.
1.int idade = 10;
2.if( !(idade > 18) ){// expressão se torna verdadeira
3. println("Você pode acessar o Sistema!");// executa
4.}
Simples assim!
Certamente você aprendeu o básico sobre operadores lógicos.
Todavia, os operadores lógicos representam a 4ª das 5 categorias de operadores da programação. Portanto, termine o seu aprendizado sobre operadores lendo o nosso artigo sobre os operadores compostos.
David Santiago
Mestre em Sistemas e Computação. Graduado em Sistemas de Informação. Professor de Linguagem de Programação, Algoritmos, Estruturas de Dados e Desenvolvimento de Jogos Digitais.