cómo se almacena un número en el procesador [cerrado]

0

Fondo:              Estoy muestreando una señal del acelerómetro a una velocidad de 20 KHz (período de cada 50 microsegundos). Necesito almacenar esta información en la tarjeta de memoria. Kit: STM32F40, IDE: Keil. La entrada ADC es de 8 bits. Estoy tratando de almacenar números en una matriz.

Pregunta: ¿Cómo se almacena una variable en el procesador?  Según keil / otras fuentes depende del compilador. El compilador tomaría al menos 4 bytes de memoria para guardar un número entero. por ejemplo, si un número es 1024, ¿cómo se almacena en el procesador? ¿se almacenará como 1000000000 o el número individual, es decir, 1,0,2,4 se almacenará individualmente? si el número es 256, ¿cómo se almacena en el procesador?

    
pregunta ashokraj

1 respuesta

3

La mayoría de los procesadores modernos almacenan enteros utilizando una representación binaria, con un byte de 8 bits. Por lo tanto, un número de 4 bytes podría almacenar 32 bits dando un rango de números:

  • Números sin firmar en el rango de 0 a 4294967295 ( \ $ 2 ^ {32} \ $ )
  • Números firmados en el rango -2147483648 ( \ $ - 2 ^ {31} \ $ ) a 2147483647 ( \ $ 2 ^ {31} -1 \ $ ). Estos se suelen almacenar utilizando complemento de dos .

El tamaño exacto del entero depende del tipo que use. Para los compiladores de C, estos son típicamente (unsigned) char como 8 bits, (unsigned) short como 16 bits, y luego (unsigned) int es típicamente de 32 bits. También hay un (unsigned) long que puede ser de 32 bits o de 64 bits dependiendo de la configuración del compilador y del procesador.

Para variables con un tamaño que sea consistente en todas las plataformas, puede usar los tipos en <cstdint> : estas son (*): (u)int8_t , (u)int16_t y (u)int32_t , con opcionalmente (u)int64_t y (u)int24_t .

Como ha dicho, desea almacenar un entero de 4 bytes (32 bits). La forma exacta en que se almacena en la memoria depende del procesador: hay dos tipos, denominados endiancia del procesador:

  • Big-Endian : almacena el byte más significativo (bits superiores) en la dirección de memoria más baja. El resto de los bytes se almacenan en orden de importancia secuencialmente reducido.
  • Little-Endian : almacena el byte menos significativo (bits más bajos) la dirección de memoria más baja. El resto de los bytes se almacenan en orden de importancia secuencialmente creciente. El STM32F40 cae en esta categoría.

Para completar, los números fraccionarios generalmente se almacenan utilizando la representación de punto flotante IEEE 754 que se utiliza, con precisión simple (~ 7 d.p.) de 32 bits, y precisión doble (~ 15 d.p.) con 64 bits.

(*) (u) determina si está firmado o no, por ejemplo, uint8_t no tiene signo de 8 bits, int8_t está firmado de 8 bits.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas