当前位置:网站首页>【 C Advanced language】 Integer Storage in Memory

【 C Advanced language】 Integer Storage in Memory

2022-06-11 21:12:00 Super, pas chauve.

Cette série,Nous allons explorerCContenu plus profond dans la langue!

                                   Super produit

Catalogue des articles


Préface

 Dans le processus quotidien de frappe de code,Nous utilisons souvent des constantes entières pour assigner des variables,Mais nous n'avons peut - être pas réfléchi à la façon dont différentes variables sont stockées en mémoire.!Aujourd'hui, je vais explorer les mystères..

La capacité interne peut être un peu plus grande,On n'a pas fini de regarder.,Regarde.

Un.、Qu'est - ce qu'un entier??


      1.Classification des entiers

        Le type entier comprend: char,short,int,long,long long.Bien sûr que si.,PourquoicharC'est un lifting.?

C'est parce quechar Les caractères correspondent ASCIIValeur du Code, Bien sûr que si. ! C'est la famille des plasticiens. !


       2. Les entiers stockent en mémoire les bases que vous devez connaître (Original anti - complément)

    En mémoire,Que ce soit positif ou négatif, Les formes de stockage sont des compléments !!

    Tout d'abord,,Lorsqu'il est stocké en mémoire, Nous stockons tous des binaires entiers . Ensuite, le code source de l'entier est représenté par le binaire , Le contre - Code et le complément. !

        Il y a trois types d'entiers dans un ordinateur 2Représentation décimale,C'est le code original.、Inversion et complément.


      Les trois représentations ont deux parties: les bits symboliques et les bits numériques,Les bits de symbole sont utilisés0Représentation“Positif”,Avec1Représentation“Négatif”.
     Original of positive、Contre、Le complément est le même.
      Les trois représentations des entiers négatifs sont différentes

      Code source
        Le code source peut être obtenu en traduisant les nombres directement en binaires sous forme de nombres positifs et négatifs. .
      Code inverse
        Modifie le BIT de symbole du code source, D'autres bits peuvent être inversés à tour de rôle pour obtenir le Code inverse .

      Complément
        Code inverse+1J'ai un complément.

Exemples:int a= -20;(Le premier bit est le BIT de symbole)

Code source:10000000 00000000 00000000 00010100

Code inverse:11111111 11111111 11111111 11101011

Complément:11111111 11111111 11111111 11101111

Le complément est le mode de stockage en mémoire !!


       3.Classification des entiers

      Les entiers peuvent être divisés en deux types: signés et non signés !C'est - à - diresignedEtunsigned.

     signedEtunsignedLa différence est Bits de symbole N'oublie pas. Bits numériques

     En général,int,char Les entiers égaux sont généralement des nombres signés .

Exemples:

unsigned  int a= -20;

Nombre non signé, Traiter le BIT de symbole le plus en avant comme un bit numérique , Donc C'est un nombre positif. .Identique à l'original

Code source:10000000 00000000 00000000 00010100

Code inverse:10000000 00000000 00000000 00010100

Complément:10000000 00000000 00000000 00010100

2.、 Stockage spécifique

1.Taille

             On peut trouver, Lorsqu'il est stocké en mémoire ,int aEtint b Ne devrait - il pas être stocké avec un complément binaire ? Ça ne devrait pas l'être.32 Le format de stockage binaire des bits ?

             Et puis..., Nous explorons !

0x- Oui.16Représentation décimale,Donc nous avons deviné, C'est probablement un complément binaire. ,Par16 Affichage décimal , Alors essayez. !

int b=20;

Identique à l'original:0000 0000 0000 0000 0000 0000 0001 0100

( Nombre binaire par quatre bits ,Oui.16Nombre décimal)

16Représentation décimale:00 00 00 14

 Une découverte surprenante,C'est pareil.!!!!!

Mais il y a quelques différences. , L'ordre est différent. !

Ça nous amène à ce que nous allons dire aujourd'hui. (Taille(Ordre des octets)) Grande extrémité petite extrémité

 Grande extrémité: Le BIT inférieur des données est sauvegardé à une adresse élevée en mémoire , Le Haut bit des données est sauvegardé à l'adresse inférieure de la mémoire

 Sous - section: Le BIT inférieur des données est sauvegardé à l'adresse inférieure en mémoire , Le BIT élevé des données est sauvegardé à l'adresse élevée de la mémoire

 Alors..., Après avoir compris et maîtrisé , Essayez de stocker le compilateur que vous utilisez !

Comme le blogueur que j'utilise vs2022, Je vais essayer. !!

 

 

2.unsignedEtsignedDifférences entre les classes entières

Commençons par une question. , Explorer à travers les questions !

char a= -1;

   Code source:10000000 00000000 00000000 00000001

   Code inverse:111111111  11111111  11111111 11111110

   Complément:11111111 11111111 11111111 11111111( Stockage en mémoire :Complément)

   Maischar Prend un octet

  11111111

  Oui.%dProduits, Il s'agit donc d'une amélioration globale .

                         Règles de levage intégral: Est inférieur à son propre type ou à certaines opérations ,Une élévation de type entier se produit

                         1.signedType: Lorsque le nombre positif augmente ,Supplément1;Complément négatif0;( Le BIT de symbole utilisé comme bit le plus élevé )

                         2.unsignedType:En montant,Supplément direct0;

Alors,char a= -1,Par%dAu moment de la sortie,Lors du levage intégral,

11111111

Après reconstitution:11111111 11111111 11111111 11111111 Complément en mémoire , Sortie en code source

Code source:10000000 00000000 00000000 00000001

(Code d'origine du complément, C'est toujours l'inverse. (Le BIT du symbole reste inchangé!),Encore un.)

Donc le résultat final est -1

 

signed char a = -1Avecchar a = -1 C'est pareil.

Dans de nombreux environnements ,char,intSont des nombres signés!

Donc le résultat est toujours -1

unsigned char a = -1

   Code source:10000000 00000000 00000000 00000001

   Code inverse:111111111  11111111  11111111 11111110

   Complément:11111111 11111111 11111111 11111111

    Prend seulement le dernier octet

  11111111

   Lifting( Supplément pour l'augmentation du nombre non signé 0 ):00000000 00000000 00000000 11111111( Mémoire pour compléter        Stockage par Code)

   Le chiffre le plus élevé est0,Est un nombre positif, Les compléments positifs et négatifs sont les mêmes ,Donc le résultat est  255.

Regardez les résultats ensemble.


 Je crois que tout le monde sait déjà, Et vous vous y connaissez. , Bien sûr que si. !

Frappe le fer quand il fait chaud. !

 

(%u Pour la sortie non signée )

Original10000000 00000000 00000000 10000000

Contre11111111 11111111 11111111 01111111

Supplément11111111 11111111 11111111 10000000

char 10000000

Lifting 11111111 11111111 11111111 10000000

Résultats :4294967168

La réponse:-10

  Ça s'est bien passé? ?

Résumé

      1.En mémoire,Que ce soit positif ou négatif, Les formes de stockage sont des compléments !!

      2.En général,int,char Les entiers égaux sont généralement des nombres signés .

      3.Taille

           Grande extrémité: Le BIT inférieur des données est sauvegardé à une adresse élevée en mémoire , Le Haut bit des données est sauvegardé à l'adresse inférieure de la mémoire

           Sous - section: Le BIT inférieur des données est sauvegardé à l'adresse inférieure en mémoire , Le BIT élevé des données est sauvegardé à l'adresse élevée de la mémoire

                                                                              N'oublie pas de réfléchir. !

 

原网站

版权声明
本文为[Super, pas chauve.]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/162/202206112107275061.html