Tipos de datos en C++: int, double, char, bool
Respuesta corta: un tipo le dice al compilador cuántos bytes necesita un valor y qué significan esos bytes. Los cuatro con los que vivirás como principiante: int (números enteros), double (decimales), char (un carácter — que en realidad es un número pequeño) y bool (verdadero/falso, impreso como 1/0).
Los cuatro, en un solo programa
#include <iostream>
using namespace std;
int main() {
int age = 25; // números enteros
double price = 9.99; // decimales
char grade = 'A'; // UN carácter, comillas simples
bool ok = true; // verdadero o falso
cout << age << " " << price << " " << grade << " " << ok << endl;
return 0;
}
Dos cosas que conviene notar: grade usa comillas simples ('A', no "A" — eso es un string, y mezclarlos es un error de compilación clásico), y ok se imprime como 1, no como true: cout muestra los bool como números salvo que pidas boolalpha.
Los cuatro tipos, uno por uno
| Tipo | Guarda | Tamaño típico | Ojo con |
|---|---|---|---|
int | Números enteros | 4 bytes | Desbordamiento más allá de ≈ ±2.1 mil millones; 7/2 es 3 |
double | Decimales | 8 bytes | 0.1 + 0.2 ≠ exactamente 0.3 (imprecisión de coma flotante) |
char | Un carácter | 1 byte | 'a' frente a "a"; en realidad es un número |
bool | true / false | 1 byte | Se imprime como 1/0; cualquier número distinto de cero se convierte en true |
Los tamaños son «típicos» porque el estándar de C++ fija mínimos, no valores exactos — en el compilador de tu escritorio, sizeof(int) imprime la respuesta real para tu máquina.
char es un número disfrazado
Cada carácter se guarda como un código entero (ASCII): 'A' es 65, 'a' es 97 y '0' es 48. Por eso puedes hacer aritmética con caracteres:
#include <iostream>
using namespace std;
int main() {
char c = 'A';
cout << c << " is code " << (int)c << endl;
cout << "next letter: " << (char)(c + 1) << endl;
cout << "digit '7' as number: " << '7' - '0' << endl;
return 0;
}
La última línea — '7' - '0' — es una expresión idiomática de nivel entrevista de verdad: convierte un carácter dígito en su valor numérico. '7' tiene código 55 y '0' tiene código 48, así que la resta deja exactamente 7 — y funciona con todos los dígitos, sin tabla de conversión.
Cómo falla cada tipo
- int se rompe al desbordarse. 2,147,483,647 + 1 no da error: da la vuelta en silencio y produce basura (comportamiento indefinido para los int con signo). Nuestro problema de Factorial está limitado a N ≤ 12 justamente porque 13! se desborda.
- double se rompe por imprecisión.
0.1 + 0.2imprime algo parecido a0.3, pero al comparar no es igual a0.3. Nunca compares doubles con==; compara con una tolerancia. Y nunca guardes dinero en un double: guarda céntimos en un int. - char se rompe por las comillas.
char c = "A";no compila:"A"es un string. Comillas simples para un carácter, siempre. - bool se rompe por conversiones sorpresa.
bool b = 5;compila sin problemas y valetrue: cualquier valor distinto de cero se convierte en true. Útil en bucles comowhile (cin >> x), y traicionero en cualquier otro sitio.
Elegir entre int y double: el árbol de decisión para principiantes
- ¿El valor puede tener alguna vez una fracción? (media, precio, porcentaje) →
double. - ¿Es un conteo, un índice, un año, una puntuación? →
int. - ¿Necesitas más de ±2.1 mil millones? →
long longen un compilador de escritorio (nuestro playground cubre el núcleo didáctico; consulta la guía de configuración del compilador). - ¿Dinero? → céntimos enteros. En serio.
Preguntas de entrevista sobre tipos
- «¿Qué imprime
coutpara unbool?» —1o0;cout << boolalphacambia a true/false. - «¿Por qué
7 / 2es igual a3?» — ambos operandos son int, así que la división es división entera (guía completa: aquí). - «¿Cuál es la diferencia entre
'A'y"A"?» — un char (un byte, código 65) frente a un string (un array que termina en'\0'). - «¿Qué pasa cuando un int se desborda?» — el desbordamiento con signo es comportamiento indefinido: ni excepción ni vuelta confiable; el compilador puede asumir que nunca ocurre.
- «¿Por qué es útil la aritmética con char?» — conversión de dígitos (
'7' - '0'), conversión de mayúsculas y minúsculas (c - 'a' + 'A') y es la base misma de cómo funciona el procesamiento de texto.
Práctica
- En el playground: imprime tus iniciales como chars y luego sus códigos; suma 32 a un char en mayúscula y mira qué pasa (eso es la minúscula).
- Año bisiesto entrena la lógica con bool; Factorial se topa de frente con el techo del int.
Relacionado: división entera, paso por valor vs puntero vs referencia, 15 preguntas de entrevista para principiantes.