C-Sprache „Speicherung von Ganzzahlen im Speicher, Einführung in Big- und Small-Endian-Speichermodi“

Inhaltsverzeichnis

1. Einführung in Datentypen

2. Wie ganze Zahlen im Speicher gespeichert werden (Originalcode, Umkehrcode, Komplementcode)

3. Einführung und Beurteilung von Big- und Small-Endian-Speichermodi


1. Einführung in Datentypen

1. Datentypen und Bytegrößen in der C-Sprache

2. Grundlegende Klassifizierung von Typen

        (1) Ganzzahlige Familie:

                        

        (2) Gleitkommafamilie:

                        

        (3) Bauart:

                        

        (4) Zeigertyp:

                        

        (5) void leerer Typ: Wird normalerweise für Funktionsrückgabetypen, Funktionsparameter und Zeigertypen verwendet.


 2. Wie ganze Zahlen im Speicher gespeichert werden

Wir wissen, dass dem Ganzzahltyp 4 Bytes im Speicher zugewiesen sind

Erstellen Sie zwei ganzzahlige Variablen a, b:

                                

 Wir können das Debuggen verwenden, um die Speichermethode anzuzeigen

Der Wert von a ist 10. Die im Speicher gespeicherte Form ist wie in der Abbildung oben dargestellt: 0a 00 00 00. Der Einfachheit halber zeigt vs eine Hexadezimalzahl an. A ist 10. Es gibt uns ein gutes Feedback, und er Das Platzieren der kleinsten Anzahl von Byte-Reihenfolge-Bits an der unteren Adresse ist eigentlich die Little-Endian-Byte-Sortiermethode .

Bevor wir darüber sprechen, wie negative Zahlen im Speicher gespeichert werden, stellen wir zunächst den Originalcode, den Umkehrcode und den Komplementcode vor.

        Originalcode, Umkehrcode, Komplementcode:

        Der Originalcode, der Umkehrcode und der Komplementcode einer positiven Zahl sind gleich. (ganzzahlige Binärzahl)

        Die Beziehung zwischen Originalcode, Komplementcode und Komplementcode negativer Zahlen:

                Originalcode: Konvertieren Sie Dezimalzahlen oder andere Dezimalzahlen in Binärzahlen .

                Negativer Code: Der ursprüngliche Code mit Ausnahme des Vorzeichenbits (dem ersten Bit) bleibt unverändert und alle anderen Bits werden invertiert .

                Zweierkomplement: Einerkomplement plus Eins .

(Ergänzung: Um den Zweierkomplementcode in den Originalcode umzuwandeln, können Sie zuerst eins subtrahieren und dann bitweise invertieren , oder Sie können zuerst bitweise invertieren und eins hinzufügen , was der Konvertierung des Originalcodes in den Zweierkomplementcode entspricht .

Alle ganzen Zahlen werden in .

 

Das Speicherformat von -10 im Speicher ist f6 ff ff ff

Mit einem Computer können wir -10 hexadezimal berechnen

 Wie Sie sehen können, ist es derselbe wie der im Speicher oben gespeicherte Hexadezimalwert.

Wenn wir den Wert von a + b berechnen möchten, können wir ihn nicht direkt mit den ursprünglichen Codes von a und b berechnen, da b eine negative Zahl ist und das Vorzeichenbit einer negativen Zahl 1 ist. Tatsächlich ist es die CPU des Computers verfügt nur über Additionsoperationen, nicht über Subtraktionsoperationen. Wenn Sie eine negative Zahlenoperation ausführen möchten, müssen Sie diese in ihr Komplement umwandeln und dann die beiden Komplemente in den Originalcode umwandeln, um sie zu berechnen .

Schreiben wir zunächst den Originalcode, den Umkehrcode und den Komplementcode von -10 auf

Originalcode: 1111111111111111111111111111111111111111111111111111111110110

Inverser Code: 100000000000000000000000000000000000000000000000001001

1010

Der Komplementberechnungsprozess von a+b :

        a: 00000000000000000000000000000000000000000000000000001010

        b: 10000000000000000000000000000000000000000000000000001010

   a+b: 10000000000000000000000000000000000000000000000000000000

Nehmen Sie dann 32 Bits in Richtung des unteren Bits der Binärebene und entfernen Sie 1, was 32 Nullen entspricht, und das Ergebnis von a + b ist 0.


3. Einführung und Beurteilung von Big- und Small-Endian-Speichermodi

        (1. Einleitung

        Little-Endian-Speichermodus: bedeutet, dass die Zahlen mit der kleinsten Bytereihenfolge in den Daten an der niedrigen Adresse und die Zahlen mit der größten Bytereihenfolge an der hohen Adresse gespeichert werden.

        Big-Endian-Speichermodus: bedeutet, dass die Zahlen mit einer größeren Bytereihenfolge in den Daten an der niedrigeren Adresse und die Zahlen mit einer kleineren Bytereihenfolge an der niedrigeren Adresse gespeichert werden.

        (2) Bestimmen Sie, ob der Speichermodus des Speichers in VS Big Endian oder Small Segment ist, und schreiben Sie einen Code, um die Entscheidung zu treffen.

        Die Adresse reicht von niedrig nach hoch. Wir setzen a = 500 und können sehen, dass die Speichermethode wie folgt aussieht:

        

Das hexadezimale Äquivalent von 500 ist 1f4

Die Low-Byte-Bits in den Daten werden hier an der Low-Adresse platziert

Daher ist die Speicherspeichermethode in VS Little-Endian-Speicher.

(3) Entwurfscode zur Bestimmung der Endianness:

Prinzip: Sei eine ganzzahlige Variable i = 1. Es gibt zwei Möglichkeiten, sie im Speicher zu speichern, nämlich Big Endian oder Small Segment.

Die Oberseite ist Little Endian

Unten ist das Big Endian

Da ich auf 4 Bytes zugreifen kann , müssen wir es in den Typ char umwandeln , es auf 1 Byte zugreifen lassen und es dann dereferenzieren . Wenn es 1 ist, ist es Little Endian und 0 ist Big Endian .

 

Ich denke du magst

Origin blog.csdn.net/cool_tao6/article/details/130935147
Empfohlen
Rangfolge