Café y Código
⚡ C++ Básico· Lección 4

4. Operadores, Aritmética y Trampas Ocultas ⚙️

Aprende a calcular y comparar con precisión en C++: evita la trampa de la división entera y domina el módulo y la lógica booleana.

1. ⚠️ La Trampa Mayor: División Entera vs Decimal

En C++, el operador de división / se comporta según el tipo de sus operandos:

ExpresiónResultado en C++¿Por qué?
7 / 23Entero entre entero: se descartan los decimales (truncado a cero).
7.0 / 23.5Al haber un double (7.0), el cálculo se promueve a decimal.
7 / 2.03.5Exactamente igual: basta con que un operando sea flotante.
division_correcta.cpp
CPP
1#include <iostream>
2
3int main() {
4 int a = 7;
5 int b = 2;
6
7 // Peligro clásico:
8 double resultado1 = a / b; // Guarda 3.0 (7/2 se truncó a 3 primero)
9 // Solución correcta con casting o decimal:
10 double resultado2 = (double)a / b; // Guarda 3.5
11
12 std::cout << "Truncado: " << resultado1 << " | Correcto: " << resultado2 << "\n";
13 return 0;
14}

2. El Operador Módulo (%): Resto de la División

El operador % devuelve el residuo exacto tras una división de enteros:

modulo_paridad.cpp
CPP
1#include <iostream>
2
3int main() {
4 int numero = 17;
5
6 // Verificar paridad:
7 if (numero % 2 == 0) {
8 std::cout << numero << " es PAR\n";
9 } else {
10 std::cout << numero << " es IMPAR\n";
11 }
12
13 // Aritmética circular (reloj 12h):
14 int horasPasadas = 26;
15 std::cout << "Hora actual: " << (horasPasadas % 12) << " hrs\n"; // 2 hrs
16 return 0;
17}

3. Pre-incremento (++i) vs Post-incremento (i++)

Ambos suman 1 a la variable, pero difieren en el instante exacto en que devuelven el valor a la expresión:

++i (Pre-incremento)

Suma 1 primero, y luego devuelve el nuevo valor:

int a = 5; int b = ++a; // a=6, b=6
i++ (Post-incremento)

Entrega el valor actual primero, y luego suma 1:

int a = 5; int b = a++; // a=6, b=5

4. Operadores Lógicos y Cortocircuito (Short-Circuit)

C++ optimiza las evaluaciones booleanas con cortocircuito:

  • && (AND): Si el primer término es false, no evalúa el segundo.
  • || (OR): Si el primer término es true, no evalúa el segundo.
  • ! (NOT): Invierte el valor booleano.
🛡️ Código Defensivo con Cortocircuito

Puedes evitar divisiones por cero en una sola línea gracias al cortocircuito:if (divisor != 0 && (total / divisor > 10)) { ... }Si divisor es 0, la segunda condición nunca se ejecuta, evitando el colapso del programa.

Ejercicio: Desglose de Monedas

Dado un monto en dinero entero (ej. 2750), calcula cuántos billetes de 1000 y cuántas monedas de 500 y 100 se necesitan usando división entera / y residuo %.

Ver solución
CPP
1#include <iostream>
2
3int main() {
4 int total = 2750;
5
6 int billetes1000 = total / 1000;
7 int resto = total % 1000;
8
9 int monedas500 = resto / 500;
10 resto = resto % 500;
11
12 int monedas100 = resto / 100;
13 resto = resto % 100;
14
15 std::cout << "Billetes de 1000: " << billetes1000 << "\n";
16 std::cout << "Monedas de 500: " << monedas500 << "\n";
17 std::cout << "Monedas de 100: " << monedas100 << "\n";
18 std::cout << "Sobrante final: " << resto << "\n";
19 return 0;
20}
Autoevaluación Formativa

Comprueba lo que Has Aprendido 🧠

Valida tu comprensión de operadores aritméticos, módulo y lógica booleana.

Dato curioso: C++ apareció en 1985; Bjarne Stroustrup en Bell Labs. Wikipedia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.