Saltar al contenido principal
LibreTexts Español

4.2: Tamaños Variables

  • Page ID
    82464
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Una pregunta común entre los nuevos programadores es “¿Por qué hay tantos tamaños de variables disponibles?” Tenemos dos tamaños diferentes de reales; flotar a 32 bits y doble a 64 bits. También tenemos tres diferentes 4 tamaños de intgers a 8, 16 y 32 bits cada uno 1. En muchos idiomas, solo hay real y entero sin variación de tamaño, entonces, ¿por qué C ofrece tantas opciones? El motivo es que “una talla no sirve para todos”. Tienes opciones para optimizar tu código. Si tienes una variable que va desde digamos, 0 a 1000, no hay necesidad de usar más que un entero corto (16 bits). El uso de un entero de 32 bits simplemente usa más memoria. Ahora bien, podrías considerar que 2 bytes adicionales no son gran cosa, pero recuerda que estamos hablando de controladores embebidos en algunos casos, no de sistemas de escritorio. Algunos controladores pequeños pueden tener solo unos pocos cientos de bytes de memoria disponibles para los datos. Incluso en sistemas de escritorio con gigabytes de memoria, elegir el tamaño incorrecto puede ser desastroso. Por ejemplo, supongamos que tiene un sistema con un convertidor analógico a digital para audio. La frecuencia de muestreo estándar de CD es de 44,100 muestras por segundo. Cada muestra tiene un valor de 16 bits (2 bytes), produciendo una velocidad de datos de 88,100 bytes por segundo. Ahora imagina que necesitas suficiente memoria para una canción de cinco minutos en estéreo. Eso funciona a casi 53 megabytes de memoria. Si hubiera elegido enteros largos (32 bits) para contener estos datos, necesitaría alrededor de 106 megabytes en su lugar. Como los valores colocados en un CD de audio nunca superan los 16 bits, sería una tontería asignar más de 16 bits cada uno para los valores. Sin embargo, los tamaños de datos son múltiplos de potencia de -2 de un byte, por lo que no puede elegir tener un número entero de, digamos, 22 bits de longitud. Son 8, 16 o 32 en su mayor parte (algunos controladores tienen un límite superior de 16 bits).

    En el caso de flotación versus doble, se usa flotador donde el espacio es premium. Tiene un rango menor (tamaño de exponente) y una precisión menor (número de dígitos significativos) que el doble. double es generalmente preferido y es la norma para la mayoría de las funciones matemáticas. Los flotadores lisos a veces se denominan individuales (es decir, precisión simple versus doble precisión).

    Si no conoce el tamaño de un elemento de datos en particular (por ejemplo, un int puede ser de 16 o 32 bits dependiendo del hardware y del compilador), puede usar el comando sizeof (). Esto parece una función pero realmente está integrada en el lenguaje. El argumento es el ítem o expresión que te interesa. Devuelve el tamaño requerido en bytes.

    size = sizeof( int );
    

    el tamaño será de 2 o 4 dependiendo del sistema.


    1. En algunos sistemas también están disponibles dobles de 80 bits y/o enteros de 64 bits.

    This page titled 4.2: Tamaños Variables is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.