> For the complete documentation index, see [llms.txt](https://bla0x1s-organization.gitbook.io/untitled-1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bla0x1s-organization.gitbook.io/untitled-1/reverse-engineering/c-programming/tipos-de-datos.md).

# TIPOS DE DATOS

Los tipos de datos en C se refiere a un extenso sistema utilizado para declarar variables p funciones de diferentes tipos. El tipo de una variable determina cuanto espacio ocupa en el almacenamiento y como se interpreta el patron de bits almacenado.

Los tipos en C se pueden clasificar de la siguiente manera:

<table data-header-hidden><thead><tr><th width="150"></th><th></th></tr></thead><tbody><tr><td>Sr.No.</td><td>Tipos y descripción</td></tr><tr><td>1</td><td><p>Tipos basicos</p><p>Son tipos aritméticos y se clasifican además en: (a) tipos enteros y (b) tipos de coma flotante.</p></td></tr><tr><td>2</td><td><p>Tipos enumerados</p><p>Son nuevamente tipos aritméticos y se usan para definir variables que solo pueden asignar ciertos valores enteros discretos a lo largo del programa.</p></td></tr><tr><td>3</td><td><p>El tipo vacío</p><p>El especificador de tipo <em>void</em> indica que no hay ningún valor disponible.</p></td></tr><tr><td>4</td><td><p>tipos derivados</p><p>Incluyen (a) tipos de puntero, (b) tipos de matriz, (c) tipos de estructura, (d) tipos de unión y (e) tipos de función.</p></td></tr></tbody></table>

Los tipos de matriz y los tipos de estructura se denominan colectivamente como tipos agregados. El tipo de una funcion especifica el tipo de valor de retorno de la funcion.&#x20;

## Tipos de Enteros

La siguienete tabla proporciona los detalles de los tipos de enteros estandar con sus tamaños de almacenamiento y rangos de valores:

<table><thead><tr><th width="189.99999999999997">Type</th><th>Storage size</th><th>Value range</th></tr></thead><tbody><tr><td>char</td><td>1 byte</td><td>-128 to 127 or 0 to 255</td></tr><tr><td>unsigned char</td><td>1 byte</td><td>0 to 255</td></tr><tr><td>signed char</td><td>1 byte</td><td>-128 to 127</td></tr><tr><td>int</td><td>2 or 4 bytes</td><td>-32,768 to 32,767 or -2,147,483,648 to 2,147,483,647</td></tr><tr><td>unsigned int</td><td>2 or 4 bytes</td><td>0 to 65,535 or 0 to 4,294,967,295</td></tr><tr><td>short</td><td>2 bytes</td><td>-32,768 to 32,767</td></tr><tr><td>unsigned short</td><td>2 bytes</td><td>0 to 65,535</td></tr><tr><td>long</td><td>8 bytes or (4bytes for 32 bit OS)</td><td>-9223372036854775808 to 9223372036854775807</td></tr><tr><td>unsigned long</td><td>8 bytes</td><td>0 to 18446744073709551615</td></tr></tbody></table>

Para obtener el espacio exacto de un tipo o una variable en una platafoma en particular, puede usar el operador `sizeof` . Las expresiones sizeof(type) arrojan el tamaño de almacenamiento del objeto o tipo de bytes. A continuacion, veamos un ejemplo para obtener el tamaño de varios tipos en una maquina utilizando diferentes constantes definidas:

```c
#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;
}
```

## Floating-Point Types

Veamos los detallles de los tipos de punto flotante con el tamaño de almacenamieto y rango de valores:

<table><thead><tr><th width="150">Type</th><th width="156">Storage size</th><th width="199">Value range</th><th>Precision</th></tr></thead><tbody><tr><td>float</td><td>4 byte</td><td>1.2E-38 to 3.4E+38</td><td>6 decimal places</td></tr><tr><td>double</td><td>8 byte</td><td>2.3E-308 to 1.7E+308</td><td>15 decimal places</td></tr><tr><td>long double</td><td>10 byte</td><td>3.4E-4932 to 1.1E+4932</td><td>19 decimal places</td></tr></tbody></table>

El archivo de encabezado float.h define macros que le permite usar estos valores y otros detalles sobre la representacion binaria de numeros reales en sus programas. Veamos un ejemplo:

```c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("Storage size for 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("Precision value: %d\n", FLT_DIG );

    return 0;
}
```

## El tipo vacio

El tipo Void especifica que no hay ningun valor disponible. Se utilizan en tres tipos de situaciones:

<table data-header-hidden><thead><tr><th width="140"></th><th></th></tr></thead><tbody><tr><td>Sr.No.</td><td>Tipos y descripción</td></tr><tr><td>1</td><td><p>Función devuelve como vacío</p><p>Hay varias funciones en C que no devuelven ningún valor o puede decir que devuelven vacío. Una función sin valor de retorno tiene el tipo de retorno como nulo. Por ejemplo, void exit (estado int);</p></td></tr><tr><td>2</td><td><p>Argumentos de función como vacíos</p><p>Hay varias funciones en C que no aceptan ningún parámetro. Una función sin parámetro puede aceptar un vacío. Por ejemplo, int rand(void);</p></td></tr><tr><td>3</td><td><p>Punteros para anular</p><p>Un puntero de tipo void * representa la dirección de un objeto, pero no su tipo. Por ejemplo, una función de asignación de memoria void *malloc( size_t size ); devuelve un puntero a void que se puede convertir a cualquier tipo de datos.</p></td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bla0x1s-organization.gitbook.io/untitled-1/reverse-engineering/c-programming/tipos-de-datos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
