Operadores de comparação e operadores lógicos em C++
O que é isso e para que serve?
Imagine que você está jogando um jogo de computador. Você tem 100 vidas. Quando encontra um monstro, o jogo verifica: "Vidas maiores que 0?". Se sim — você pode lutar. Se não — o jogo diz: "Game Over".
Na programação, essas verificações são feitas por operadores de comparação e operadores lógicos. Eles ajudam o programa a tomar decisões. Por exemplo:
- Verificar se há dinheiro suficiente na conta
- Saber se já é noite
- Entender se o jogador pode abrir a porta (se ele tem a chave OU sabe o código)
Sem eles, o programa seria como um robô que faz a mesma coisa, sem olhar para o que está acontecendo ao redor. Com eles, ele se torna inteligente!
Sintaxe e exemplos de código
Em C++, os operadores de comparação são assim:
== // igual (atenção: dois sinais de igual!)
!= // diferente
> // maior que
< // menor que
>= // maior ou igual
<= // menor ou igual
E os operadores lógicos conectam várias condições:
&& // E (ambas as condições devem ser true)
|| // OU (pelo menos uma condição true)
! // NÃO (muda true para false e vice-versa)
Exemplo 1: Verificação de idade
#include <iostream>
using namespace std;
int main() {
int age = 14;
// Verifica: idade maior ou igual a 18?
if (age >= 18) {
cout << "Você é adulto!" << endl;
} else {
cout << "Você ainda é criança." << endl;
}
// Saída: "Você ainda é criança."
// Porque 14 não é maior ou igual a 18
return 0;
}
Exemplo 2: E lógico (&&)
#include <iostream>
using namespace std;
int main() {
bool tem_chave = true;
bool sabe_codigo = false;
// Para abrir a porta, precisa da chave E do código
if (tem_chave && sabe_codigo) {
cout << "Porta aberta!" << endl;
} else {
cout << "Acesso negado." << endl;
}
// Saída: "Acesso negado."
// Porque sabe_codigo = false
return 0;
}
Exemplo 3: OU lógico (||)
#include <iostream>
using namespace std;
int main() {
int temperatura = 30; // graus
// Vamos passear se estiver calor OU seco
if (temperatura > 20 || temperatura < 10) {
cout << "Vamos passear!" << endl;
} else {
cout << "Ficamos em casa." << endl;
}
// Saída: "Vamos passear!"
// Porque 30 > 20 (primeira condição true)
return 0;
}
Exemplo 4: NÃO lógico (!)
#include <iostream>
using namespace std;
int main() {
bool esta_chovendo = false;
// Se NÃO está chovendo, vamos passear
if (!esta_chovendo) {
cout << "Uhu, vamos passear!" << endl;
} else {
cout << "Pegamos o guarda-chuva." << endl;
}
// Saída: "Uhu, vamos passear!"
// Porque !false = true
return 0;
}
Exemplo 5: Condição complexa
#include <iostream>
using namespace std;
int main() {
int idade = 16;
bool tem_carteira = false;
bool com_pais = true;
// Pode dirigir se:
// (idade >= 18 E tem carteira) OU (com os pais)
if ((idade >= 18 && tem_carteira) || com_pais) {
cout << "Pode dirigir!" << endl;
} else {
cout << "Não pode dirigir." << endl;
}
// Saída: "Pode dirigir!"
// Porque com_pais = true
return 0;
}
Comparação com Python
Em Python, os mesmos operadores são quase iguais, mas há diferenças importantes:
| Operação | C++ | Python |
|---|---|---|
| Igual | == |
== |
| Diferente | != |
!= |
| Maior que | > |
> |
| E | && |
and |
| OU | || |
or |
| NÃO | ! |
not |
Exemplo em Python:
age = 14
if age >= 18:
print("Você é adulto!")
else:
print("Você ainda é criança.")
# Saída: "Você ainda é criança."
A principal diferença: em Python, os operadores lógicos são escritos com palavras (and, or, not), enquanto em C++ são símbolos (&&, ||, !). Além disso, em Python não são necessários ponto e vírgula e chaves — em vez disso, usa-se indentação.
Erros típicos de iniciantes
Erro 1: Confundir = e ==
Um sinal de igual (=) é atribuição. Dois (==) é comparação.
// INCORRETO:
if (x = 5) { ... } // Erro! Atribui 5 à variável x
// CORRETO:
if (x == 5) { ... } // Verifica se x é igual a cinco
Erro 2: Esquecer a precedência de operadores
Como na matemática: primeiro multiplicação, depois adição. Na lógica também há ordem: primeiro !, depois &&, depois ||.
// Pode ser confuso:
if (a || b && c) // Primeiro executa b && c, depois a || resultado
// Melhor usar parênteses:
if (a || (b && c)) // Agora está claro
Erro 3: Comparar tipos diferentes
int x = 5;
double y = 5.0;
if (x == y) { ... } // Funciona, mas pode ser inesperado
// Melhor converter para o mesmo tipo:
if (x == (int)y) { ... }
Erro 4: Usar =