1. ¿Qué tipos de números hay?
En programación siempre estamos trabajando con números — desde la edad de un usuario hasta el número de estrellas en la galaxia o los céntimos en una cuenta bancaria. Pero cada tarea necesita un tipo de número distinto: a veces solo importa guardar enteros, a veces necesitas decimales muy precisos, y otras veces solo quieres números "sin negativos".
Números enteros (int y otros)
Un número entero es un número sin parte decimal.
En C# lo más común es usar el tipo int, pero hay más opciones que cambian en tamaño y rango.
- int — el tipo "de batalla" para enteros. Soporta valores muy grandes (y pequeños), y no ocupa mucha memoria.
Por ejemplo, para contar likes, edad, número de días en un año, casi siempre vas a usar int. - long — lo usas si los valores pueden ser enormes (rollo miles de millones o trillones).
Ejemplo: guardar el total de visualizaciones de YouTube en toda la historia. - short — tipo ahorrador, pero poco usado. Va bien donde hay muchos valores pequeños iguales (por ejemplo, datos de audio, componentes de color).
- byte — para valores aún más pequeños, sobre todo en gráficos y manejo de archivos, donde ahorrar memoria importa.
Números decimales (double, float, decimal)
A veces tienes que trabajar con números que tienen parte decimal. Por ejemplo, la temperatura del aire, la nota media de un estudiante, el precio de un producto con céntimos.
- double — es el tipo "por defecto" para decimales. Suficientemente preciso para la mayoría de cálculos (ejemplo: 3.1415926535…).
- float — más ligero y menos preciso, se usa más en gráficos por ordenador o cuando tienes que procesar muchos datos y ahorrar memoria es clave.
- decimal — pensado para temas financieros y contables, cuando necesitas precisión hasta el último céntimo y no quieres "perder" nada por cómo se guardan los decimales. Por ejemplo, para guardar el saldo de una cuenta, el precio de un producto, el tipo de cambio.
Tipos numéricos especiales
En C# hay tipos numéricos extra para casos especiales:
- uint, ulong, ushort — tipos "sin signo", solo permiten valores positivos, pero el rango es el doble que sus equivalentes "con signo".
- sbyte — tipo pequeño, con signo (para guardar valores negativos y positivos de -128 a 127).
- BigInteger — si tienes que trabajar con números gigantescos, más allá de los rangos estándar, por ejemplo en criptografía o cálculos astronómicos.
2. Números con y sin signo
Un tipo con signo puede guardar tanto números positivos como negativos. Es útil cuando los valores pueden ser "por encima o por debajo de cero": por ejemplo, temperatura, saldo de una cuenta, altura respecto al nivel del mar.
Un tipo sin signo — solo cero y números positivos. Perfecto cuando no puede haber negativos — por ejemplo, número de personas en una sala, bytes en un archivo, tiempo.
Ejemplo:
- int (con signo): -10, 0, 50
- uint (sin signo): 0, 10, 1000
Usando un tipo sin signo, puedes guardar el doble de valor máximo en la variable (porque no hay "mitad negativa del rango"). Se usan cuando tienes claro que el valor nunca será negativo.
Tipos enteros con signo
| Tipo | Tamaño | Rango de valores | Ejemplo de uso |
|---|---|---|---|
|
1 byte | -128 a 127 | -128, 0, 127 |
|
2 bytes | -32 768 a 32 767 | -1000, 0, 32000 |
|
4 bytes | -2 147 483 648 a 2 147 483 647 | -1000000, 0, 2000000 |
|
8 bytes | -9 223 372 036 854 775 808 a 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Tipos enteros sin signo
| Tipo | Tamaño | Rango de valores | Ejemplo de uso |
|---|---|---|---|
|
1 byte | 0 a 255 | 0, 128, 255 |
|
2 bytes | 0 a 65 535 | 1000, 65000 |
|
4 bytes | 0 a 4 294 967 295 | 100, 4000000000 |
|
8 bytes | 0 a 18 446 744 073 709 551 615 | 1, 18_000_000_000_000 |
Tipos decimales
| Tipo | Tamaño | Ejemplo de valores | Descripción |
|---|---|---|---|
|
4 bytes | 3.14f, -0.001f | precisión simple (7 cifras) |
|
8 bytes | 3.1415, -1.7E+308 | precisión doble (15-16 cifras) |
|
16 bytes | 0.1m, 12345.6789m | alta precisión para finanzas |
3. Sufijos para números
A veces tienes que decirle explícitamente al compilador qué tipo quieres usar para un número. Esto se hace con sufijos:
- L o l — para el tipo long (por ejemplo, 10000000000L)
- U o u — para el tipo uint (por ejemplo, 123U)
- F o f — para el tipo float (por ejemplo, 3.14f)
- D o d — para el tipo double (normalmente no hace falta, porque los decimales sin sufijo ya son double)
- M o m — para el tipo decimal (por ejemplo, 99.99m — ¡muy importante en dinero!)
Si no pones sufijo, por defecto un número entero es int, y un decimal es double. Por ejemplo, 42 es int, y 3.14 es double.
¿Para qué sirve esto? Por ejemplo, para no tener error al asignar un número grande a una variable tipo long:
long bigNumber = 9000000000L; // si quitas la L, te da error de compilación
Y para dinero, mejor siempre usar decimal con el sufijo m:
decimal price = 999.99m;
4. Separador con guión bajo _
Cuando los números son largos, es fácil perderse entre ceros. Para que se vea bonito y fácil de leer, en C# puedes usar guiones bajos dentro del número.
int population = 146_700_000;
long stars = 100_000_000_000L;
Es totalmente legal: el compilador ignora los guiones bajos, y tú puedes ver los grupos de cifras de un vistazo. Solo no pongas el guión bajo al principio, al final, después del punto o antes del sufijo.
5. Tipo carácter char
A veces en el programa tienes que trabajar no con números, sino con caracteres individuales: una letra, un número, un símbolo, incluso un espacio. Para eso tienes el tipo especial — char.
¿Qué es char?
Es una variable que guarda un solo carácter:
- una letra latina o cirílica ('A', 'я')
- un número ('5')
- un símbolo especial ('#', '%', '@')
- un carácter de control ('\\n' — salto de línea)
Detalles:
- El valor de tipo char se escribe entre comillas simples: char letter = 'B';
- En realidad, dentro de char se guarda el código numérico del carácter (en Unicode), así que puedes comparar char, convertirlo a int e incluso hacer operaciones aritméticas simples:
char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a; // 65 — código de la letra 'A'
Puedes usar caracteres especiales, por ejemplo: char tab = '\\t'; // carácter de tabulación
¿Para qué sirve char?
Para trabajar con texto carácter a carácter (por ejemplo, comprobar la primera letra de una cadena, buscar signos de puntuación, leer una contraseña carácter por carácter).
GO TO FULL VERSION