Inhaltsverzeichnis
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 .