Tipos de datos en lenguaje C

En el lenguaje de programación C , los tipos de variables son la semántica y las características del almacenamiento de elementos de datos. Se expresan en la sintaxis del lenguaje como declaraciones de ubicaciones de memoria o variables . Los tipos de variables también determinan los tipos de operaciones o los métodos de procesamiento de elementos de datos.

El lenguaje C proporciona tipos aritméticos básicos, como tipos enteros y reales , y sintaxis para construir tipos compuestos y de matriz. Los encabezados ( encabezados en inglés) de la biblioteca C estándar para usar a través de los encabezados #include , contienen definiciones de tipos de soporte, que tienen propiedades adicionales, como la provisión de un tamaño exacto de almacenamiento, independientemente de la implementación del idioma en hardware específico plataformas.

Tipos estándar

Lista completa: consulte la página en inglés .

NOTA : el tamaño de los valores devueltos por cada tipo puede diferir dependiendo del hardware de la computadora: por lo tanto, el valor del tipo int(generalmente en 4 bytes) puede ser de 8 bytes en algunos modelos. Para averiguar el tamaño de un tipo, usamos el operador sizeof() :

printf("taille de int : %d", sizeof(int));

que devuelve por ejemplo  :

taille de int : 4

Para tener tamaños precisos, asignaremos memoria dinámica . Por tanto, los tamaños de los valores presentados a continuación no son aplicables en todos los casos .

Tipos principales

El lenguaje C proporciona cuatro especificadores aritméticas básicas carbón , int , float, y el doble que además de sus versiones modificadas firmada , sin firmar, corto, y largo . La siguiente tabla enumera las combinaciones y el rango de valores permitidos para cada declaración.

Tipo Breve explicación Entrenadores
char La unidad direccionable más pequeña de una máquina, puede contener caracteres básicos. Es un valor entero que puede estar firmado o no. %c
signed char Tipo char con signo, capaz de representar al menos números [−127; +127]. %c
unsigned char Tipo char sin signo, capaz de representar al menos los números [0; 255]. %c
short
short int
signed short
signed short int
Tipo mínimo, corto, entero y entero con signo, capaz de representar al menos números [−32,767; +32 767]. %i
unsigned short
unsigned short int
Tipo de entero corto mínimo, igual que el tipo de entero sin signo estándar. %u
int
signed
signed int
Tipo entero estándar con signo capaz de representar al menos números [−32,767; +32 767]. %i o %d
unsigned
unsigned int
Igual que el tipo entero estándar, pero sin signo, capaz de representar al menos los números [0; 65.535]. %u
long
long int
signed long
signed long int
Tipo entero largo, con signo y entero, capaz de representar al menos números [−2 147 483 647; +2 147 483 647]. %li ou %ld
unsigned long
unsigned long int
Igual que el tipo entero largo pero sin signo, capaz de representar al menos números [0; 4.294.967.295]. %lu
long long
long long int
signed long long
signed long long int
Tipo entero largo, entero y con signo, capaz de representar al menos los números [−9 223 372 036 854 775 807; +9 223 372 036 854 775 807]. %lli
unsigned long long
unsigned long long int
Mismo tipo largo entero largo pero sin signo, capaz de representar al menos los números [0; +18 446 744 073 709 551 615]. %llu
float Tipo flotante, punto real con punto flotante, dicho de precisión simple.

Codificado como cuatro bytes (32 bits) en la mayoría de los sistemas.

Requerido para cálculos aritméticos, Anexo F "IEC 60559 aritmética de coma flotante".

%f %F

%g %G

%e %E

%a %A

doubledouble float Idem tipo flotante pero con doble precisión.

Codificado en ocho bytes de 64 bits.

%lf %lF

%lg %lG

%le %lE

%la %lA

long doublelong double float Idem tipo flotante pero con precisión cuádruple.

Codificado en dieciséis bytes (128 bits).

%Lf %LF

%Lg %LG

%Le %LE

%La %LA

Tipo booleano

C99 (inglés) agregó un tipo booleano _Bool (verdadero / falso). Además, el encabezado se <stdbool.h>define boolcomo un alias conveniente para este tipo y también proporciona macros para truey false. _Boolfunciona de manera similar a un tipo entero normal, con una excepción: todas las asignaciones a las _Boolque no son 0 (falso) se almacenan como 1 (verdadero). Este comportamiento existe para evitar desbordamientos de enteros en conversiones de contracción implícitas. Por ejemplo, en el siguiente código:

unsigned char b = 256; if (b) { /* faire quelque chose */ }

La variable bcontiene falso (o 0) si el carácter unsigned chartiene 8 bits de longitud. Esto se debe a que el valor 256 no coincide con el tipo de datos, lo que da como resultado que se utilicen los 8 bits inferiores, por lo que el valor es cero. Sin embargo, cambiar el tipo hace que el código anterior se comporte normalmente:

_Bool b = 256; if (b) { /* faire quelque chose */ }

El tipo _Bool también asegura que los valores verdaderos sean siempre comparables entre sí:

_Bool a = 1, b = 2; if (a == b) { /* faire quelque chose */ }


Notas y referencias

  1. "  Asignación dinámica  " , en OpenClassrooms (consultado el 25 de octubre de 2020 )
  2. "  " Tamaños de tipos enteros ", ISO-IEC 9899 , 5.2.4.2.1.  » , P.  454