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.

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
trueofalse. ==compara;=asigna.&&(y),||(o) y!(no) combinan condiciones.- Con
&&y||, la parte derecha solo se evalúa si hace falta. std::boolalphaescribetrueyfalseen vez de1y0.
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.