paulfjujo a écrit:
le compilateur a donc tendance à forcer l'usage de signed int à la place du format 8 bits
Une autre remarque par rapport au "
int (signé ou pas signé)
à la place du format 8 bits"
=> Cela n'est pas conforme aux spécifications du Langage C
En effet, la taille d'un
int est fonction de la capacité du µC à traiter la valeur dans la plage [-32768, +32767] (valeur sur 16 bits) ou [-2147483648, +2147483647] (valeur sur 32 bits) et ce,
directement et d'une manière atomique au travers de ses registres
=> Donc un
int (signé ou pas signé) est codé sur 2 octets sur les µC 16 bits et sur 4 octets sur les µC 32 bits
Maintenant, paradoxalement et en toute rigueur, même sur un µC 8 bits, un
int doit être considéré comme codé sur 2 octets (toujours pour un soucis de portabilité et de respect de la spécification ;-)
Donc, si l'on souhaite manipuler une valeur dont on sait qu'elle est dans la plage [-128, +127] (1 octet), il faut la déclarer en
char signé (à préciser suivant le compilateur). Dans la plage [0, 255] (1 octet), il faut la déclarer en
char non signé (toujours à préciser suivant le compilateur)
C'est la raison pour laquelle, les types suivants '
byte' (pour le
char), '
int8_t', '
uint8_t', '
int16_t', '
uint16_t', '
int32_t', etc. ont été créés (mais que l'on peut créer soit-même) en surcouche des types de base et qui ont l'avantage d'être sans ambiguïté quant à la taille de leur représentation, qui facilitent grandement la lecture du programme et surtout le portage entre plates-formes d'architecture différente 8, 16 ou 32 bits du µC ou même entre langages comme Langage C <-> Java
Cf.
Programmation C/Types de baseNB1: @Portage Langage C <-> Java, il est impératif de connaître les spécifications de Java qui a l'avantage d'avoir spécifié tous les types de base quelle que soit la plate-forme 8, 16 ou 32 bits: cf.
Programmation Java/Types de baseNB2: Désolé d'avoir été un peu long (≥ 32 bits en Langage C ;-), mais l'appropriation d'un langage passe par la connaissance de ses spécifications, de son modèle mémoire et de son écosystème (compilateurs ouverts et libres type
gcc/g++ qui respectent les spécifications, packages,
sources de la librairie de base, projets Open Source, communauté active, etc.) ... la syntaxe étant très importante mais secondaire à mon avis (car très proche entre les
langages informatiques avec des faux-amis comme avec les
langues écrites et parlées). Malheureusement, on a trop tendance à mette la syntaxe en avant plan, ce qui est une grave erreur à mon sens...