Langage C "Stockage d'entiers en mémoire, introduction aux modes de stockage big et small endian"

Table des matières

1. Introduction aux types de données

2. Comment les entiers sont stockés en mémoire (code original, code inverse, code complément)

3. Introduction et jugement des modes de stockage big et small endian


1. Introduction aux types de données

1. Types de données et tailles d'octets en langage C

2. Classification de base des types

        (1) Famille entière :

                        

        (2) Famille à virgule flottante :

                        

        (3) Type de construction :

                        

        (4) Type de pointeur :

                        

        (5) type vide void : généralement utilisé pour les types de retour de fonction, les paramètres de fonction et les types de pointeur.


 2. Comment les entiers sont stockés en mémoire

On sait que le type entier se voit allouer 4 octets en mémoire

Créez deux variables entières a, b :

                                

 Nous pouvons utiliser le débogage pour voir sa méthode de stockage en mémoire

La valeur de a est 10. La forme stockée dans la mémoire est celle illustrée dans la figure ci-dessus : 0a 00 00 00. Pour faciliter l'observation, vs affiche un nombre hexadécimal. A vaut 10. Cela nous donne un bon retour d'information, et il Placer le plus petit nombre de bits d'ordre d'octet à l'adresse basse est en fait la méthode de tri des octets petit-boutiste .

Avant de parler de la façon dont les nombres négatifs sont stockés en mémoire, nous introduisons d’abord le code original, le code inverse et le code complémentaire.

        Code original, code inverse, code complément :

        Le code original, le code inverse et le code complémentaire d'un nombre positif sont les mêmes. (entier binaire)

        La relation entre le code original, le code complément et le code complément des nombres négatifs :

                Code d'origine : convertissez des nombres décimaux ou autres nombres décimaux en binaires .

                Code négatif : le code d'origine, à l'exception du bit de signe (le premier bit), reste inchangé et tous les autres bits sont inversés .

                Complément à deux : complément à un plus un .

(Supplément : pour convertir le code complémentaire à deux en code d'origine, vous pouvez d'abord en soustraire un, puis inverser le code au niveau du bit , ou vous pouvez d'abord inverser le code au niveau du bit et en ajouter un , ce qui revient à convertir le code d'origine en code complémentaire à deux. .

Tous les entiers sont stockés en mémoire sous forme de complément à deux .

 

Le format de stockage de -10 en mémoire est f6 ff ff ff

Nous pouvons utiliser un ordinateur pour calculer -10 en hexadécimal

 Comme vous pouvez le voir, c'est la même chose que la valeur hexadécimale stockée dans la mémoire ci-dessus.

Si nous voulons calculer la valeur de a+b, si nous utilisons directement les codes originaux de a et b, nous ne pouvons pas la calculer, car b est un nombre négatif et le bit de signe d'un nombre négatif est 1. En fait, le processeur de l'ordinateur n'a que des opérations d'addition, pas Pour la soustraction, si vous souhaitez effectuer une opération sur un nombre négatif, vous devez le convertir en son complément, puis convertir les deux compléments en code original pour le calculer .

Écrivons d'abord le code original, le code inverse et le code complémentaire de -10

Code d'origine: 111111111111111111111111111111111111111111111111111111110110

Code inverse : 100000000000000000000000000000000000000000000000000001001

1010

Le processus de calcul du complément de a+b :

        a:000000000000000000000000000000000000000000000000000001010

        b:100000000000000000000000000000000000000000000000000001010

   a+b:1000000000000000000000000000000000000000000000000000000000

Ensuite, prenez 32 bits dans la direction du bit inférieur du niveau binaire et supprimez 1, qui vaut 32 0, et le résultat de a+b est 0.


3. Introduction et jugement des modes de stockage big et small endian

        (1. Introduction

        Mode de stockage Little-Endian : signifie que les nombres avec le plus petit ordre d'octets dans les données sont stockés à l'adresse basse et que les nombres avec le plus grand ordre d'octets sont stockés à l'adresse haute.

        Mode de stockage big-endian : signifie que les nombres avec un ordre d'octets plus grand dans les données sont stockés à l'adresse inférieure et que les nombres avec un ordre d'octets plus petit sont stockés à l'adresse inférieure.

        (2) Déterminez si le mode de stockage de la mémoire dans VS est big endian ou small segment, et écrivez un morceau de code pour porter un jugement.

        L'adresse est de bas en haut. Nous définissons a = 500 et nous pouvons voir que la méthode de stockage en mémoire est comme ceci,

        

L'équivalent hexadécimal de 500 est 1f4

Les bits d'octets faibles dans les données ici sont placés à l'adresse basse

Par conséquent, la méthode de stockage en mémoire dans VS est le stockage petit-boutiste.

(3) Code de conception pour déterminer l’endianité :

Principe : Soit une variable entière i = 1. Il existe deux manières de la stocker en mémoire, à savoir big endian ou small segment.

Le dessus est petit endian

Ci-dessous le big endian

Puisque je peux accéder à 4 octets , nous devons le convertir en type char , le laisser accéder à 1 octet , puis le déréférencer . Si c'est 1, c'est du petit endian et 0 est du gros endian .

 

Je suppose que tu aimes

Origine blog.csdn.net/cool_tao6/article/details/130935147
conseillé
Classement