Entendiendo los tipos de datos en C: Guía completa
Los tipos de datos en C se refieren a un sistema extensivo para declarar variables o funciones de diferentes tipos. El tipo de una variable determina cuánto espacio ocupa en almacenamiento y cómo se interpreta el patrón de bits almacenado.
Los tipos en C se clasifican así:
| Nº | Tipos y Descripción |
|---|---|
| 1 | Tipos Básicos Son tipos aritméticos, subdivididos en: (a) tipos enteros y (b) tipos de punto flotante. |
| 2 | Tipos Enumerados Son tipos aritméticos usados para definir variables que solo pueden asignar ciertos valores enteros discretos. |
| 3 | El tipo void El especificador void indica que no hay valor disponible. |
| 4 | Tipos Derivados Incluyen (a) Tipos puntero, (b) Tipos array, (c) Tipos estructura, (d) Tipos unión y (e) Tipos función. |
Los tipos array y estructura se denominan colectivamente tipos agregados. El tipo de una función especifica el tipo de valor de retorno. Veremos los tipos básicos a continuación; los demás se cubrirán en próximos capítulos.
Tipos Enteros
Tabla con detalles de tipos enteros estándar, tamaños de almacenamiento y rangos de valores:
| Tipo | Tamaño | Rango de valores |
|---|---|---|
| char | 1 byte | -128 a 127 o 0 a 255 |
| unsigned char | 1 byte | 0 a 255 |
| signed char | 1 byte | -128 a 127 |
| int | 2 o 4 bytes | -32,768 a 32,767 o -2,147,483,648 a 2,147,483,647 |
| unsigned int | 2 o 4 bytes | 0 a 65,535 o 0 a 4,294,967,295 |
| short | 2 bytes | -32,768 a 32,767 |
| unsigned short | 2 bytes | 0 a 65,535 |
| long | 8 bytes (4 en SO de 32 bits) | -9223372036854775808 a 9223372036854775807 |
| unsigned long | 8 bytes | 0 a 18446744073709551615 |
Para obtener el tamaño exacto de un tipo o variable en una plataforma, usa el operador sizeof. sizeof(tipo) devuelve el tamaño en bytes. Ejemplo para obtener tamaños usando constantes de limits.h y float.h:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("CHAR_BIT : %d\n", CHAR_BIT);
printf("CHAR_MAX : %d\n", CHAR_MAX);
printf("CHAR_MIN : %d\n", CHAR_MIN);
printf("INT_MAX : %d\n", INT_MAX);
printf("INT_MIN : %d\n", INT_MIN);
printf("LONG_MAX : %ld\n", (long) LONG_MAX);
printf("LONG_MIN : %ld\n", (long) LONG_MIN);
printf("SCHAR_MAX : %d\n", SCHAR_MAX);
printf("SCHAR_MIN : %d\n", SCHAR_MIN);
printf("SHRT_MAX : %d\n", SHRT_MAX);
printf("SHRT_MIN : %d\n", SHRT_MIN);
printf("UCHAR_MAX : %d\n", UCHAR_MAX);
printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX);
printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX);
printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX);
return 0;
}
Resultado típico en Linux:
CHAR_BIT : 8 CHAR_MAX : 127 CHAR_MIN : -128 INT_MAX : 2147483647 INT_MIN : -2147483648 LONG_MAX : 9223372036854775807 LONG_MIN : -9223372036854775808 SCHAR_MAX : 127 SCHAR_MIN : -128 SHRT_MAX : 32767 SHRT_MIN : -32768 UCHAR_MAX : 255 UINT_MAX : 4294967295 ULONG_MAX : 18446744073709551615 USHRT_MAX : 65535
Tipos de Punto Flotante
Detalles de tipos de punto flotante estándar con tamaños, rangos y precisión:
| Tipo | Tamaño | Rango de valores | Precisión |
|---|---|---|---|
| float | 4 byte | 1.2E-38 a 3.4E+38 | 6 decimales |
| double | 8 byte | 2.3E-308 a 1.7E+308 | 15 decimales |
| long double | 10 byte | 3.4E-4932 a 1.1E+4932 | 19 decimales |
El archivo float.h define macros para usar estos valores. Ejemplo que imprime espacio de almacenamiento de float y sus rangos:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("Tamaño de float : %d \n", sizeof(float));
printf("FLT_MAX : %g\n", (float) FLT_MAX);
printf("FLT_MIN : %g\n", (float) FLT_MIN);
printf("-FLT_MAX : %g\n", (float) -FLT_MAX);
printf("-FLT_MIN : %g\n", (float) -FLT_MIN);
printf("DBL_MAX : %g\n", (double) DBL_MAX);
printf("DBL_MIN : %g\n", (double) DBL_MIN);
printf("-DBL_MAX : %g\n", (double) -DBL_MAX);
printf("Valor de precisión: %d\n", FLT_DIG);
return 0;
}
Resultado en Linux:
Tamaño de float : 4 FLT_MAX : 3.40282e+38 FLT_MIN : 1.17549e-38 -FLT_MAX : -3.40282e+38 -FLT_MIN : -1.17549e-38 DBL_MAX : 1.79769e+308 DBL_MIN : 2.22507e-308 -DBL_MAX : -1.79769e+308 Valor de precisión: 6
El tipo void
El tipo void especifica que no hay valor disponible. Se usa en tres situaciones:
| Nº | Tipos y Descripción |
|---|---|
| 1 | Funciones que devuelven void Hay funciones que no devuelven valor (devuelven void). Ejemplo: void exit(int status); |
| 2 | Argumentos de función como void Funciones que no aceptan parámetros. Ejemplo: int rand(void); |
| 3 | Punteros a void Un puntero |
Lenguaje C
- Interruptores eléctricos: tipos, funciones y aplicaciones
- 5 Modelos de Centros de Datos Explicados: Diseño, Casos de Uso y Ejemplos
- Ocho Modelos Clave de Computación en la Nube en 2021
- 8 Tipos Comunes de Violación de Datos: Ejemplos Reales e Impacto
- Domine variables y tipos de datos primitivos en C#: Guía completa
- Entendiendo los Tipos de Datos en C++: Fundamentos, Modificadores y Mejores Prácticas
- Tipos de datos en C explicados: int, float, char y más – guía completa
- Variables, tipos de datos y constantes en C – Guía práctica
- Dominando la Abstracción de Datos en C++: Simplifica el Diseño con Separación Interfaz-Implementación
- Dominando tipos de datos en Python: Guía práctica
- Tipos de Datos Primitivos en Java: Guía Completa con Ejemplos