« Programmation C/Types de base » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Représentation des entiers signés : Cohérence : la borne minimale commune à SVA/CPL1/CPL2 est -(2<sup>N</sup>-1) (SVA et CPL1 autorisant 2 représentations pour 0 en mode signé : +0 -0)
→‎Représentation des entiers signés : Une remarque indiquant que de nos jours on utilise encore de vieux processeurs et compilateurs
Ligne 110 :
* Les domaines indiqués pour les nombres signés dans le tableau précédent sont ceux d'une implémentation par '''complément à 1''', ou par '''signe et valeur absolue'''. Pour '''le complément à 2''', la borne inférieure est de la forme -2<sup>N-1</sup>, ce qui autorise une valeur supplémentaire (ex : <code>int</code> de -2<sup>15</sup> à +2<sup>15</sup>-1, soit de -{{formatnum:32768}} à +{{formatnum:32767}}),
* un <code>int</code> implémenté sur 32 bits pourrait aller de -(2<sup>31</sup>-1) à 2<sup>31</sup>-1, par exemple<ref name="domaineEntier">La norme C contraint les domaines de valeurs des types signés entre -(2<sup>N-1</sup>-1) et 2<sup>N-1</sup>-1, où N est un entier quelconque, et les types non signés entre 0 et 2<sup>N</sup>-1.</ref>, et un programme tournant sur une telle implémentation peut alors utiliser ces valeurs, mais il perdrait en portabilité.
 
Les processeurs modernes supportent un grand nombre de bits, pouvant autoriser les compilateurs à fournir des types stockés sur un plus grand nombre de bits que le nombre minimal indiqué par la norme. Cependant des processeurs plus anciens sont encore utilisés de nos jours (coût réduit) sur des systèmes embarqués.
Il est donc important de vérifier que les valeurs utilisées puissent être stockées dans les variables.
Par exemple, cela permet l'utilisation d'une bibliothèque C (exemple : un décodeur vidéo) sur un système embarqué.
Dans le cas où une bibliothèque assume une taille des types plus grande que supporté par le compilateur pour le processeur, il faudra effectuer des modifications du code source pour que la bibliothèque soit utilisable sur le système embarqué.
 
{| class="wikitable"