Lors de la création d'une union d'un entier non signé et d'une matrice de 4 octets en C, l'ordre des octets semble être inversé. Pourquoi est-ce?
pour un entier avec une représentation binaire 10000000 00000000 00000000 00000000,
Je m'attendrais à ce que b [0] = 10000000, B [1] = 00000000 etc .. p>
3 Réponses :
Parce que votre système est petit Endian. P>
32 bits entier sur le système grand Endian, il serait stocké comme: BTW La plupart des populaires sont peu d'Endian. p> 0x11223344 code> est stocké dans la mémoire
0x44 0x33 0x22 0x11 code> p>
0x11 0x22 0x33 0x44 Code> P>
L'ordre dans lequel les octets sont stockés en mémoire est une fonction de l'endansion de votre plate-forme. Dans ce cas, votre système est petit-Endian, vous observez donc que les octets à des adresses plus élevées du int code> ils constituent les bits les plus significatifs (qui, dans votre exemple de 2147483648, sont un seul
1 code> bit au chiffre le plus significatif). P>
Merci pour votre réponse; Cela signifie-t-il que ce code n'est pas portable sur tous les systèmes ...?
@professorcolm correct; Le code C portable ne contiendra pas d'arithmétique ou de logique spécifique à une endansion particulière
Dans les jours où les ordinateurs ont souvent été appelés à traiter des nombres plus grands que ce qu'ils pouvaient gérer en une seule étape, l'addition et la soustraction nécessiteraient généralement que l'ordinateur traitait les parties de l'ordre inférieur du nombre d'abord, autant que possible. Numéros de processus à la main. Si l'on ajoute 123 à 678 et commence par ajouter le dernier chiffre de chaque addendend (3 et 8), on pourrait déterminer le dernier chiffre du résultat 1, l'écrire en bas et l'oublie au-delà du fait qu'il y ait C'était un port, avant que l'on doive même regarder toutes les autres parties de l'addend. On peut ensuite ajouter les chiffres moyens avec le report du nombre précédent et sachez que le chiffre moyen du résultat est de 0 sans avoir à examiner le premier chiffre d'opérande. On peut ensuite calculer le premier chiffre du résultat. P>
Si on avait commencé en ajoutant le 1 au 7, on ne pourrait pas écrire le premier chiffre du résultat avec certitude jusqu'à ce que l'on n'ait pas également traité le deuxième et troisième chiffre. Ainsi, il faudrait soit garder une trace de tous les chiffres jusqu'à ce que l'on ait terminé le calcul ou être disposé à écrire un résultat incorrect des chiffres antérieurs, puis à les ajuster s'il y a un transport. Pas aussi gentil ou efficace. P>
S'il serait possible de stocker des objets en mémoire avec le chiffre plus gros en premier, mais effectuez des calculs à partir de la petite fin, les calculs d'adresse ont tendance à être plus efficaces si l'adresse d'un objet identifie directement la première partie qui sera utilisé. Ainsi, la plupart des systèmes stockent la partie la moins importante de chaque objet en mémoire avant les parties les plus importantes. P>
En savoir plus sur He Endianess - c'est un ordinateur les sujets les plus élémentaires et les plus importants