Incluso si su procesador de 8 bits solo admite el manejo de datos a 8 bits, el compilador manejará todo lo necesario para una adición de 16 bits y la transmisión de datos, por lo que el tamaño en bits de int, short u otros es puramente basado en la configuración de tus compiladores.
Normalmente encontrará esta información en algún lugar del manual del compilador.
Para salir de este problema, es una buena práctica no usar los tipos definidos por el compilador directamente. Es posible que desee incluir stdint.h (si está disponible) que proporciona tipos de datos con nombres claros, como uint8_t, que es un entero sin signo con 8 bits.
Si no puede usar esto, cree su propia versión y cree un encabezado con algo en esas líneas (u obtenga un stdint.h completo y adáptelo a su compilador):
typedef unsigned char uint8_t
donde, por supuesto, tiene que consultar el manual del compilador para obtener los tipos de compilador correctos.
Este wikibook ofrece una buena explicación de stdint.h.
Sin embargo, hay algunos problemas, ya que especialmente para los dispositivos integrados, no todos los compiladores admiten todos los tipos de datos. Los tipos de datos de 64 bits a menudo faltan, por lo que hay dos resultados posibles: o su programa no se compilará más (creo que ese es el caso bueno) o alguien tiene typedef
ed el tipo de datos de 64 bits a uno más pequeño y su programa podría generar resultados inesperados debido a eso.
En mi opinión, si un tipo de datos no es compatible, debería dar lugar a un error de compilación, por lo que el programador es realmente consciente del problema antes de golpearlo en el sistema.
Como ejemplo de dónde encontrar esa información para un compilador:
El IAR Embedded Workbench viene con un montón de documentación, para este tipo de información, debe buscar en la Guía de desarrollo y, debajo de la Información de referencia, encontrará la representación de datos. Bajo ese punto encontrará todos los detalles necesarios para manejar los datos correctamente. La alineación, el tamaño y el rango se dan todos allí.
Data type Size Range Alignment
bool 8 bits 0 to 1 1
char 8 bits 0 to 255 1
...
signed long long 64 bits -2^63 to 2^63-1 8
unsigned long long 64 bits 0 to 2^64-1 8