DMarlon Studio

Lección 7 · 7 de 20

Comparaciones y lógica · C++

Compare valores en C++ con ==, !=, < y >, combine condiciones con &&, || y !, y escriba los bool como true y false con std::boolalpha.

C++ · Comparaciones y lógica en DMarlon Studio: el código del ejemplo y su salida en la terminal

Una comparación da un `bool`: age >= 18 es falso con 16 años. Los operadores son == (igual), != (distinto), <, >, <= y >=. Cuidado: = asigna y == compara.

Por defecto, std::cout escribe un bool como 0 o 1. Tras `std::boolalpha` escribe false y true, y así sigue hasta el final del programa. Dentro de una cadena de <<, las comparaciones van entre paréntesis.

`&&` (y) exige que las dos partes sean verdaderas, `||` (o) que lo sea al menos una y `!` (no) invierte el valor. Por eso un menor puede ver la película si va con un adulto, y 31.5 grados es un día caluroso: está entre 30 y 45.

C++ evalúa en cortocircuito: si la parte izquierda de && es falsa, la derecha ni se calcula. Gracias a eso, boxes != 0 && items / boxes > 5 nunca divide entre cero.

Las std::string también se comparan: < sigue el orden alfabético, y "apple" < "banana" es verdadero.

Código · main.cpp

#include <iostream>#include <string>int main() {    int age = 16;    bool withAdult = true;    double temperature = 31.5;    // A comparison gives a bool: true or false.    bool adult = age >= 18;    std::cout << "adult = " << adult << '\n';  // by default, 0 or 1    std::cout << std::boolalpha;               // from now on, false or true    std::cout << "adult = " << adult << '\n';    std::cout << "age == 16: " << (age == 16) << ", age != 16: " << (age != 16) << '\n';    // && (and): both must be true. || (or): at least one. ! (not) reverses.    bool canEnter = adult || withAdult;    std::cout << "Can see the film: " << canEnter << '\n';    bool hotDay = temperature > 30 && temperature <= 45;    std::cout << "Hot day: " << hotDay << ", not hot: " << !hotDay << '\n';    // Short-circuit: if the left side decides, the right one is not evaluated.    int boxes = 0, items = 12;    if (boxes != 0 && items / boxes > 5) std::cout << "The boxes are full\n";    else std::cout << "No boxes to check (and no division by zero)\n";    // Strings are compared in alphabetical order.    std::string a = "apple", b = "banana";    std::cout << a << " < " << b << ": " << (a < b) << '\n';    return 0;}

Salida · c++ -std=c++17 main.cpp -o main && ./main

adult = 0
adult = false
age == 16: true, age != 16: false
Can see the film: true
Hot day: true, not hot: false
No boxes to check (and no division by zero)
apple < banana: true

Para recordar

  • Una comparación da true o false.
  • == compara; = asigna.
  • && (y), || (o) y ! (no) combinan condiciones.
  • Con && y ||, la parte derecha solo se evalúa si hace falta.
  • std::boolalpha escribe true y false en vez de 1 y 0.

Ejercicio

Escriba la condición de una oferta: hay descuento si el cliente es socio (bool member) o si la compra supera 100 euros, pero nunca en domingo (bool sunday). Pruébela con varias combinaciones.