sizeof(int)
 

Pregunta: ¿De qué tamaño es un int? ¿De 16 bits? ¿De 32 bits?

La verdad es que depende de la plataforma. Típicamente, un int es del tamaño en el que al procesador le resulta mas fácil hacer operaciones. En un micro de 8 bits, es muy probable que el int mida 8 bits.

¿Alguna vez lo han intentado?

Es muy simple. Si tienen acceso a printf:

    printf("sizeof(char)      %d\n", sizeof(char));
    printf("sizeof(short)     %d\n", sizeof(short));
    printf("sizeof(int)       %d\n", sizeof(int));
    printf("sizeof(long)      %d\n", sizeof(long));
    printf("sizeof(float)     %d\n", sizeof(float));
    printf("sizeof(long long) %d\n", sizeof(long long));
    printf("sizeof(double)    %d\n", sizeof(double));
    printf("sizeof(void *)    %d\n", sizeof(void *));
    printf("sizeof(int *)     %d\n", sizeof(int *));
    printf("sizeof(double *)  %d\n", sizeof(double *)); 

 En una PC x86 verán que:

    sizeof(char)     1
    sizeof(short)    2
    sizeof(int)      4
    sizeof(long)     4
    sizeof(float)    4
    sizeof(double)   8
    sizeof(void *)   4
    sizeof(int *)    4
    sizeof(double *) 4

Con esto empiezo mi argumento: hay que tener cuidado qué tipo de datos usan. Es muy probable que el DSP que usen tenga un int de 16 bits (2 bytes y no 4). Para esto, hay que asegurarse que nuestro algoritmo funcione de "igual manera" en la PC que en el DSP.

    typedef unsigned char   UInt8;    ///< Unsigned 8-bit integer type.
    typedef char            Int8;     ///< Signed 8-bit integer type.
    typedef short           Int16;    ///< Signed 16-bit integer type.
    typedef unsigned short  UInt16;   ///< Unsigned 16-bit integer type.
    typedef int             Int32;    ///< Signed 32-bit integer type.
    typedef unsigned int    UInt32;   ///< Unsigned 32-bit integer type.

Esto nos soluciona la mayoría de nuestros problemas. Ahora sólo habría que usar nuestros tipos de datos en lugar de int.

Incluso al más experimentado le llega a pasar... Guardar un valor del orden de 400 en una variable en la que no cabe. A un UInt8 le "cabe" un valor máximo de 255. Dependiendo del procesador, puede que ese número se trunque (0x90 en lugar de 0x190) o se sature (0xFF).


 [ Regresar ]