Los tipos de datos y las variables - Curso C# y Visual Studio - Capítulo 3

Curso de c sharp

Tercer capítulo ya en el que ya te vas a poner a programar. En este capítulo aprenderás lo básico sobre las variables y los tipos de datos en C#.

¿Qué son las variables? ¿Qué tipos de datos hay en C#?

Las variables son contenedores para almacenar datos y como su nombre indica, los datos pueden variar.

En C# tenemos 16 tipos de datos integrados que se utilizan para almacenar datos de todo tipo, números enteros, decimales, texto (cadenas de caracteres), booleanos, etc. Estos 16 tipos de datos se pueden dividir en 2 grupos, 13 de ellos son datos simples y los no simples. Vayamos viendo cada uno de estos tipos.

Tipos de datos de C#

Tipos simples de C#

De los 13 tipos de datos simples, 11 son numéricos. Los podemos dividir en 3 categorías:

  • 8 tipos enteros de longitud variante con o sin signo.
    • sbyte
    • byte
    • short
    • ushort
    • int
    • uint
    • long
    • ulong
  • 2 tipos de coma flotante.
    • float
    • double
  • 1 tipo de mayor precion para decimales.
    • decimal

Nos quedan los otros 2 tipos de datos simples:

  • char
  • bool

Tipos no simples de C#

Ya he nombrado 13 de los 16, nos quedan estos 3 tipos de datos no simples:

  • object
  • string
  • dynamic
Tipo de dato de C# Tamaño Rangos ¿Con signo? Sufijo
sbyte 8 bits (1 byte) -128 a 127 Si
byte 8 bits (1 byte) 0 a 255 No
short 16 bits (2 bytes) -32.768 a 32.767 Si
ushort 16 bits (2 bytes) 0 a 65.535 No
int 32 bits (4 bytes) -2.147.483.648 a 2.147.483.647 Si
uint 32 bits (4 bytes) 0 a 4.294.967.295 No u
long 64 bits (8 bytes) -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Si l
ulong 64 bits (8 bytes) 0 a 18.446.744.073.709.551.615 No ul
float 32 bits (4 bytes) 6 a 9 dígitos f
double 64 bits (8 bytes) 15 a 17 dígitos d
decimal 128 bits  (16 bytes) 28 a 29 dígitos m
bool true, false

Vamos a probar los 8 primeros tipos de datos, los datos numéricos enteros, en el siguiente probaremos los decimales.

El tipo de dato numérico entero sbyte de C#

Este tipo de dato es el más pequeño con signo de C#. Admite números muy pequeños, de -128 a 127. Esta pequeña capacidad del contendor o variable es debida a que se reserva solo 8 bits en memoria. Si miras la tabla de tipos de datos de arriba, podrás ver que a cuanto mayor es la capacidad del tipo de dato de una variable, mayor es su tamaño en bits.

Saber utilizar bien los tipos de datos para ajustarlos a los datos almacenados en las variables es una de las claves para crear programas más rápidos y ligeros. Óptimos es la palabra acertada.

En el siguiente código he creado una variable. Para hacerlo, he tenido que indicar el tipo de dato que va a contener, en este caso es sbyte, ya que quiero almacenar un dato numérico 50, el cual cabe perfectamente en una variable sbyte.

Las variables de tipo sbyte son buenas para almacenar edades por ejemplo, ya que normalmente, nadie llega a vivir más de los 127 años . También para días del mes o cualquier dato pequeño ya sea negativo o positivo.

Para asegurarme de que te queda totalmente claro, sbyte es el tipo de dato, numero1 (o el nombre que le quieras dar) es el nombre de la variable, el cual deberás seguir unas ciertas normas para nombres que veremos en otro capítulo. Con el símbolo = se le da un valor a la variable, en este caso 50 pero puede ser cualquiera de entre -128 y 127. Se finaliza la variable con un punto y coma.

Puedes declarar una variable sin darle un valor, por ejemplo sbyte numero1; Esto quiere decir que la has declarado, en el momento que le des un valor por primera vez la estarás iniciando.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            sbyte numero1 = 50;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

Este es el resultado que aparecerá si ejecutas el código anterior. Gracias a Console.WriteLine, se puede mostrar el valor de una variable solo con nombrarla.

50

Valores incorrectos para tipos de datos de C#

¿Qué pasa si introduces un valor no admitido por un tipo de dato? probémoslo introduciendo el valor 700 en una variable de tipo sbyte.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            sbyte numero1 = 700;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

El resultado es que el programa no compila, ya que no se puede guardar un valor tan grande en sbyte.
Para poder almacenar un valor de 700, tendrías que utilizar mínimo una variable de tipo short (mira la tabla de arriba)

Error CS0031: El valor constante '700' no se puede convertir en 'sbyte'	Tests

El tipo de dato numérico entero byte de C#

sbyte es un tipo de dato con signo, lo que permite que sus 8 bits (caben 256 valores) se dividan entre los números negativos y positivos, 127 + el número 0 (128 valores positivos) + 128 valores negativos hacen un total de 256 valores, lo que ocupa en la memoria los 8 bits, de ahí el tamaño del tipo de dato.

En cambio, byte no tiene signo, lo que impide que utilicemos números negativos en él, pero en cambio, podemos utilizar los valores que sbyte eran negativos para admitir más positivos. Si utilizamos los 8 bits para números positivos, nos da la posibilidad de almacenar números de 0 al 255 positivos (256 valores posibles).

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            byte numero1 = 210;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

Como puedes ver, en este caso, si intentas poner un número como 210, no habrá problema. En cambio, no puedes poner ningún número negativo.

210

El tipo de dato numérico entero short de C#

El tipo de dato short ya nos abre más posibilidades, ya que adminte 65.536 dígitos y tiene signo, lo que nos da un rango de entre -32.768 y 32.767. Al aumentar tanto la capacidad, aumenta también el tamaño de la variable, ya que ocupa el doble que sbyte o byte.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            short numero1 = -17800;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

-17800

El tipo de dato numérico entero ushort de C#

El tipo de dato ushort es sin signo y tiene un tamaño de 16 bits al igual que short, lo que hace que no admita números negativos pero que tenga sus 65.536 posibilidades en positivo (del 0 al 65.535).

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            short numero1 = 61000;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

61000

El tipo de dato numérico entero int de C#

El tipo de dato numérico más usado suele ser int, tiene un tamaño intermedio de 4 bytes y es suficientemente grande para cubrir la mayor parte de las necesidades numéricas. Tiene signo y por lo tanto, admite números negativos. Es capaz de almacenar números de -2.147.483.648 a 2.147.483.647. Más de 2000 millones son suficientes para casi todo.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            int numero1 = 1700456452;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

1700456452

El tipo de dato numérico entero uint de C#

En el caso de uint, como no tiene signo, podemos utilizar números del 0 al 4.294.967.295, más de 4 billones. No obstante, no se pueden utilizar números negativos.

Si no pones el sufijo (los sufijos están en la tabla de arriba) a los tipos de datos que corresponde, el programa compila.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            uint numero1 = 3500456452u;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

3500456452

El tipo de dato numérico entero long de C#

Ya nos vamos a números muy grandes. El tipo de dato long tiene signo y permite valores numéricos de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Ocupa el doble que int o uint y 4 veces el tamaño de un short o ushort y 8 veces el tamaño de de byte y sbyte. Utilízalo solo cuando necesites números tan largos.

Los sufijos se pueden escribirse en minúscula y en minúscula. De hecho, Visual Studio recomienda pero no obliga a escribir el sufijo de long L en mayúsculas ya que una l minúscula es facilmente confundible con el dígito 1 o con la letra i mayúscula.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            long numero1 = -9223372036854775807L;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

-9223372036854775807

El tipo de dato numérico entero ulong de C#

Acabamos con este kilométrico capítulo viendo el último de los 8 tipos enteros, ulong, el cual no tiene signo y permite valores numéricos enteros del 0 al 18.446.744.073.709.551.615. Ocupa 64 bits como long y tiene el sufijo ul.

Código

using System;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            long numero1 = -18000000000000000000UL;
            Console.WriteLine(numero1);
        }
    }
}

Resultado en la consola

18000000000000000000UL

Espero que te haya quedado todo claro, no te preocupes si no lo entiendes todo, esto está comenzando todavía y quedan muchas cosas por ver y probar.
Por cierto, aún no se acaba el capítulo. Te dejo unos ejercicios para que pruebes si realmente sabes manejar todo lo aprendido en este capítulo. Si te quedan dudas, como siempre digo, déjame un comentario.


Ejercicios de C#

  1. ¿Qué tipo de dato numérico más óptimo deberías utilizar preferentemente para un dato de edad de persona como por ejemplo 29?

  2. ¿Qué tipo de dato numérico más óptimo deberías utilizar preferentemente para almacenar el número 3595432383?

  3. ¿Qué tipo de dato numérico más óptimo deberías utilizar preferentemente para almacenar el número -1565427373?

  4. ¿Qué tipo de dato numérico más óptimo deberías utilizar preferentemente para almacenar el número 233?

  5. ¿Qué tipo de dato numérico más óptimo deberías utilizar preferentemente para almacenar el número 61005?

  6. La solución la encontrarás aquí: Haz click aquí.


    Suscríbete a mi canal de YouTube para apoyarme

    Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

    Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

    No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


    Comentarios

    Si te quedan dudas sobre el temario, sobre C#, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.