53 - Todos los tipos de datos primitivos en el lenguaje C


Ver video

Como hemos estado aprendiendo a programar utilizando el lenguaje C no nos hemos quedado a hilar fino en los tipos de datos primitivos.

Cada vez que necesitamos almacenar un entero utilizamos el tipo int, también dijimos que el tipo char permite almacenar un entero pequeño, pero el lenguaje C permite definir distintos tipos de enteros según la capacidad máxima a almacenar y si necesitamos guardar el signo.

Hay cuatro modificadores de tipo para las variables enteras: signed, unsigned, short y long que nos permiten ampliar los tipos enteros en el lenguaje C.

Variables de tipo entera.

Problema 1:

Definir variables de tipo entera, almacenar valores por asignación y mostrar su contenido

Programa: programa182.c

#include<stdio.h>
#include<conio.h>

int main()
{
    signed char c1=65;
    printf("c1 es de tipo signed char:%c \n",c1);
    unsigned char c2=160;
    printf("c2 es de tipo unsigned char:%c \n",c2);
    signed short int e1=32000;
    printf("e1 es de tipo short int:%i \n",e1);
    unsigned short int e2=64000;
    printf("e2 es de tipo unsigned short int:%i \n",e2);
    signed int e3=-2147483648;
    printf("e3 es de tipo signed int:%i \n",e3);
    unsigned int e4=4294967295;
    printf("e4 es de tipo unsigned int:%u \n",e4);
    signed long int e5=-2147483648;
    printf("e5 es de tipo signed long int:%li \n",e5);
    unsigned long int e6=2147483647;
    printf("e6 es de tipo unsigned long int:%lu \n",e6);
    signed long long int e7=-9223372036854775807;
    printf("e7 es de tipo signed long long int:%lli \n",e7);
    unsigned long long int e8=18446744073709551615;
    printf("e8 es de tipo unsigned long long int:%llu \n",e8);
    getch();
    return 0;
}
tipos de datos enteros

Como vemos tenemos que pasar distintos valores luego del caracter % en la función printf.

Si queremos conocer cual es el valor máximo y mínimo para cada uno de los tipos de datos enteros del lenguaje C podemos ejecutar el siguiente programa:

Programa: programa183.c

#include <stdio.h>
#include<conio.h>
#include <limits.h>

int main() {

   printf("El minimo valor para un signed char = %i\n", SCHAR_MIN);
   printf("El maximo valor para un signed char = %i\n", SCHAR_MAX);
   printf("El maximo valor para un unsigned char = %i\n\n", UCHAR_MAX);

   printf("El minimo valor para un signed short int = %i\n", SHRT_MIN);
   printf("El maximo valor para un signed short int = %i\n", SHRT_MAX);
   printf("El maximo valor para un unsigned short int = %i\n\n", USHRT_MAX);

   printf("El minimo valor para un signed int = %i\n", INT_MIN);
   printf("El maximo valor para un signed int = %i\n", INT_MAX);
   printf("El maximo valor para un unsigned int = %u\n\n", UINT_MAX);

   printf("El minimo valor para un signed long int = %li\n", LONG_MIN);
   printf("El maximo valor para un signed long int = %li\n", LONG_MAX);
   printf("El maximo valor para un unsigned long int = %lu\n\n", ULONG_MAX);

   printf("El minimo valor para un signed long long int = %lli\n", LONG_LONG_MIN);
   printf("El maximo valor para un signed long long int = %lli\n", LONG_LONG_MAX);
   printf("El maximo valor para un unsigned long long int = %llu\n\n", ULONG_LONG_MAX);

   getch();
   return 0;
}

El archivo de inclusión limits.h tiene una serie de macros con los valores máximos y mínimos definidos para nuestro compilador.

El resultado de ejecutar este programa con el compilador GCC en la plataforma Windows 10 ofrece los siguientes resultados:

tipos de datos enteros maximos y minimos

Debemos elegir la variable más adecuada según el valor máximo y mínimo a guardar para que nuestro programa sea más eficiente en cuanto a espacio para reservar como el tiempo de procesamiento de dichas variables.

Si queremos saber cuantos bytes se necesitan reservar para cada uno de los tipos de variables podemos ejecutar el programa:

Programa: programa184.c

#include<stdio.h>
#include<conio.h>

int main()
{
    printf("Bytes requeridos para tipo char: %i\n",sizeof(char));
    printf("Bytes requeridos para tipo short int: %i\n",sizeof(short int));
    printf("Bytes requeridos para tipo int: %i\n",sizeof(int));
    printf("Bytes requeridos para tipo lont int: %i\n",sizeof(long int));
    printf("Bytes requeridos para tipo long long int: %i\n",sizeof(long long int));
    getch();
    return 0;
}

El resultado de ejecutar este programa con el compilador GCC en la plataforma Windows 10 ofrece los siguientes resultados:

tamaños en bytes de tipos de datos enteros

Como podemos ver definir una variable de tipo long long int requiere reservar 8 bytes para el almacenamiento del entero.

No dispusimos con el modificador unsigned ya que el tamaño de la variable sigue siendo igual.

Variables de tipo decimal.

Cuando queremos almacenar un valor con parte decimal hemos estado definiendo variables de tipo float.

En el lenguaje C podemos definir variables decimales de tipo:

Se diferencian en la precisión como almacenan el valor real. La menos precisa es el tipo float, le sigue double y finalmente la más precisa es long double.

Problema 2:

Imprimir cuantos bytes requieren cada uno de los tipos de datos decimales que tiene el lenguaje C.

Programa: programa185.c

#include<stdio.h>
#include<conio.h>

int main()
{
    printf("Bytes requeridos para tipo float: %i\n",sizeof(float));
    printf("Bytes requeridos para tipo double: %i\n",sizeof(double));
    printf("Bytes requeridos para tipo long double: %i\n",sizeof(long double));
    getch();
    return 0;
}

El resultado de ejecutar este programa con el compilador GCC en la plataforma Windows 10 ofrece los siguientes resultados:

tamaños en bytes de tipos de datos decimales: float double y long double

Retornar