Quelle partie de la représentation en bits entière fait partie de la norme?

Combien peut-on supposer à propos de la représentation des entiers en mémoire?

Comment une méthode portable de découper et d’épisser des nombres entiers constitue-t-elle une opération binary?

La norme C traite des représentations des types entiers dans la section 6.2.6.2.

Il spécifie une représentation binary pour les types entiers. Pour les types non signés, les bits sont divisés en bits de valeur et en bits de remplissage . Les bits de remplissage ne consortingbuent pas à la valeur; il n’y a pas besoin de bits de remplissage. Pour les types signés, il existe un seul bit de signe. Les types signés peuvent être représentés sous la forme soit du signe et de la magnitude , soit du complément à deux , soit du complément (le complément à deux est presque universel pour les systèmes modernes).

L’ordre des bits, ainsi que la présence et le nombre de bits de remplissage, sont définis par l’implémentation. (La plupart des implémentations modernes n’ont pas de bits de remplissage).

Le concept de bits de remplissage et la ressortingction aux trois représentations canoniques ont été introduits en C99.

Les opérateurs de bits ( << , >> , & , et autres) sont définis en termes de bits constituant la représentation des valeurs des opérandes, mais les exigences relatives aux représentations sont suffisamment spécifiques pour que cela soit sans ambiguïté dans la plupart des cas. La description des opérateurs de décalage << et >> indique spécifiquement que, par exemple, le résultat de E1 << E2 est E1 × 2 E2 ; voir la section 6.5.7 du projet de loi N1570 cité.

La norme C ++ a une note non normative indiquant qu'elle autorise les représentations du complément à 2, du complément à 1 et de la magnitude signée pour les types intégraux, mais il ne semble pas exister d'affirmation explicite qu'aucune autre représentation n'est autorisée. Il exige que "les représentations des types intégraux définissent des valeurs en utilisant un système de numération binary pur". Vous pouvez voir les détails sanglants dans le brouillon de travail N4296 de la norme C ++ (ou dans tout autre brouillon, ou dans la norme même si vous en avez une copie).