⚙️ C++

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 =