⚙️ C++

Operadores de comparación y operadores lógicos en C++

¿Qué es y para qué sirve?

Imagina que estás jugando un videojuego. Tienes 100 vidas. Cuando te encuentras con un monstruo, el juego verifica: "¿Vidas mayores que 0?". Si es así, puedes luchar. Si no, el juego dice: "Game Over".

En programación, estas comprobaciones las realizan los operadores de comparación y los operadores lógicos. Ayudan al programa a tomar decisiones. Por ejemplo:

  • Verificar si hay suficiente dinero en la cuenta
  • Saber si ha llegado la noche
  • Entender si el jugador puede abrir la puerta (si tiene la llave O sabe el código)

Sin ellos, el programa sería como un robot que hace lo mismo sin mirar lo que sucede a su alrededor. ¡Con ellos, se vuelve inteligente!

Sintaxis y ejemplos de código

En C++, los operadores de comparación se ven así:

==  // igual (¡atención: dos signos igual!)
!=  // no igual
>   // mayor que
<   // menor que
>=  // mayor o igual que
<=  // menor o igual que

Y los operadores lógicos conectan varias condiciones:

&&  // Y (ambas condiciones deben ser true)
||  // O (al menos una condición debe ser true)
!   // NO (cambia true a false y viceversa)

Ejemplo 1: Verificación de edad

#include <iostream>
using namespace std;

int main() {
    int age = 14;
    
    // Verificamos: ¿edad mayor o igual a 18?
    if (age >= 18) {
        cout << "¡Eres adulto!" << endl;
    } else {
        cout << "Todavía eres un niño." << endl;
    }
    // Salida: "Todavía eres un niño."
    // Porque 14 no es mayor o igual a 18
    return 0;
}

Ejemplo 2: Y lógico (&&)

#include <iostream>
using namespace std;

int main() {
    bool tiene_llave = true;
    bool sabe_codigo = false;
    
    // Para abrir la puerta, se necesita Y la llave Y el código
    if (tiene_llave && sabe_codigo) {
        cout << "¡Puerta abierta!" << endl;
    } else {
        cout << "Acceso denegado." << endl;
    }
    // Salida: "Acceso denegado."
    // Porque sabe_codigo = false
    return 0;
}

Ejemplo 3: O lógico (||)

#include <iostream>
using namespace std;

int main() {
    int temperatura = 30; // grados
    
    // Salimos a pasear si hace calor O está seco
    if (temperatura > 20 || temperatura < 10) {
        cout << "¡Vamos a pasear!" << endl;
    } else {
        cout << "Nos quedamos en casa." << endl;
    }
    // Salida: "¡Vamos a pasear!"
    // Porque 30 > 20 (la primera condición es true)
    return 0;
}

Ejemplo 4: NO lógico (!)

#include <iostream>
using namespace std;

int main() {
    bool llueve = false;
    
    // Si NO llueve, salimos a pasear
    if (!llueve) {
        cout << "¡Hurra, a pasear!" << endl;
    } else {
        cout << "Cogemos el paraguas." << endl;
    }
    // Salida: "¡Hurra, a pasear!"
    // Porque !false = true
    return 0;
}

Ejemplo 5: Condición compleja

#include <iostream>
using namespace std;

int main() {
    int edad = 16;
    bool tiene_licencia = false;
    bool con_padres = true;
    
    // Puede conducir un coche si:
    // (edad >= 18 Y tiene licencia) O (con padres)
    if ((edad >= 18 && tiene_licencia) || con_padres) {
        cout << "¡Puede ponerse al volante!" << endl;
    } else {
        cout << "No puede conducir." << endl;
    }
    // Salida: "¡Puede ponerse al volante!"
    // Porque con_padres = true
    return 0;
}

Comparación con Python

En Python, los mismos operadores se ven casi igual, pero hay diferencias importantes:

Operación C++ Python
Igual == ==
No igual != !=
Mayor que > >
Y && and
O || or
NO ! not

Ejemplo en Python:

age = 14
if age >= 18:
    print("¡Eres adulto!")
else:
    print("Todavía eres un niño.")
# Salida: "Todavía eres un niño."

La principal diferencia: en Python, los operadores lógicos se escriben con palabras (and, or, not), mientras que en C++ se escriben con símbolos (&&, ||, !). Además, en Python no se necesitan puntos y coma ni llaves; en su lugar se usan sangrías.

Errores típicos de principiantes

Error 1: Confundir = y ==

Un signo igual (=) es asignación. Dos (==) es comparación.

// INCORRECTO:
if (x = 5) { ... }  // ¡Error! Asigna 5 a la variable x

// CORRECTO:
if (x == 5) { ... }  // Verifica si x es igual a cinco

Error 2: Olvidar la prioridad de operaciones

Como en matemáticas: primero la multiplicación, luego la suma. En lógica también hay un orden: primero !, luego &&, luego ||.

// Puede no estar claro:
if (a || b && c) // Primero se ejecuta b && c, luego a || resultado

// Es mejor usar paréntesis:
if (a || (b && c)) // Ahora está claro

Error 3: Comparar tipos diferentes

int x = 5;
double y = 5.0;
if (x == y) { ... } // Funciona, pero puede ser inesperado

// Es mejor convertir a un mismo tipo:
if (x == (int)y) { ... }

Error 4: Usar =