Inhaltsverzeichnis:
Video: Writing 2D Games in C using SDL by Thomas Lively 2024
zu arbeiten. C ++ - Variablen werden intern als so genannte Binärzahlen gespeichert. Binärzahlen werden als eine Folge von 1 und 0 Werten gespeichert, die als Bits bekannt sind. Die meiste Zeit brauchen Sie sich nicht wirklich mit bestimmten Bits zu befassen, die Sie zur Darstellung von Zahlen verwenden. Manchmal ist es jedoch praktisch und bequem, mit Zahlen auf Bit-Ebene zu basteln - daher stellt C ++ eine Reihe von Operatoren für diesen Zweck bereit.
Die so genannten logischen Operatoren bitwise arbeiten mit ihren Argumenten auf der Bit-Ebene. Um zu verstehen, wie sie funktionieren, untersuchen Sie zuerst, wie Computer Variablen speichern.
Das Dezimalzahlensystem
Die Zahlen, die Sie seit dem Zeitpunkt kennen, an dem Sie zum ersten Mal an Ihren Fingern zählen konnten, werden als Dezimalzahlen bezeichnet, weil sie auf auf der Zahl 10. Im Allgemeinen drückt der Programmierer C ++ - Variablen als Dezimalzahlen aus. Daher könnten Sie den Wert von var als (sagen wir) 123 angeben, aber die Auswirkungen berücksichtigen.
Eine Zahl wie 123 bezieht sich auf 1 * 100 + 2 * 10 + 3 * 1. Alle diese Basiszahlen - 100, 10 und 1 - sind Potenzen von 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Auf eine etwas andere (aber äquivalente) Weise ausgedrückt, sieht 123 so aus:
123 = 1 * 10 < 2 + 2 * 10 1 + 3 * 10 0 Denken Sie daran, dass
eine beliebige Zahl zur Null-Potenz ist. Andere Zahlensysteme
Nun, okay, mit 10 als Basis (oder
base ) unseres Zählsystems stammen wahrscheinlich die 10 menschlichen Finger, die ursprünglichen Zählwerkzeuge. Eine alternative Basis für ein Zählsystem könnte genauso gut 20 gewesen sein.
Oktal -System genauso gut funktioniert: 123
10 = 1 * 8 2 + 7 * 8 1 < + 3 * 8 0 = 173 8 Die kleinen 10 und 8 beziehen sich hier auf das Nummerierungssystem, 10 für dezimal (Basis 10) und 8 für oktal (Basis 8). Ein Zählsystem kann jede positive Basis verwenden. Das binäre Zahlensystem Computer haben im Wesentlichen zwei Finger. Computer bevorzugen das Zählen mit der Basis 2. Die Zahl 123 10 würde so ausgedrückt werden:
123
10 = 0 * 2
7 + 1 * 2 < 6 + 1 * 2
5 + 1 * 2 4 + 1 * 2 3 + 0 * 2 2 + 1 * 2 1 + 1 * 2 0 123 10 = 0 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1 = 01111011 2 Die Computerkonvention drückt Binärzahlen unter Verwendung von 4, 8, 16, 32 oder sogar 64 Binärziffern aus, auch wenn die führenden Ziffern 0 sind.Das liegt auch daran, wie Computer intern gebaut werden. Da der Ausdruck Ziffer sich auf ein Vielfaches von 10 bezieht, wird eine Binärziffer als Bit bezeichnet (Abkürzung für Binärziffer >). Ein Byte besteht aus 8 Bit. (Das Aufrufen einer Binärziffer a Byte-it schien keine gute Idee zu sein.) Der Speicher wird normalerweise in Bytes gemessen (wie Rollen in Einheiten von Dutzenden von Bäckern gemessen werden). Bei einer so kleinen Basis müssen Sie eine
große
Bitanzahl verwenden, um Zahlen auszudrücken. Menschen wollen nicht die Mühe haben, einen Ausdruck wie 011110112 zu verwenden, um einen solchen weltlichen Wert wie 123 10 auszudrücken. Programmierer bevorzugen es, Zahlen unter Verwendung einer geraden Anzahl von Bits auszudrücken. Das Oktalsystem - das auf 3 Bit basiert - war in den frühen Tagen von C das Standard-Binärsystem. Wir sehen noch heute eine Spur davon - eine Konstante, die mit einer 0 beginnt, wird in C ++ als oktal angenommen. Somit lautet die Zeile: cout << "0173 =" << 0173 << endl; erzeugt folgende Ausgabe: 0173 = 123 Oktal wurde jedoch fast vollständig durch das Hexadezimal -System ersetzt, das auf 4-Bit-Ziffern basiert. Hexadezimal verwendet die gleichen Ziffern für die Ziffern 0 bis 9. Für die Ziffern zwischen 9 und 16 verwendet Hexadezimal die ersten sechs Buchstaben des Alphabets: A für 10, B für 11 usw. Somit wird 123 10 zu 7B
16 , wie folgt: 123 = 7 * 16 1 + B (dh 11) * 16 0
= 7B
16
Programmierer bevorzugen es, hexadezimale Zahlen in Vielfachen von 4 hexadezimalen Ziffern auszudrücken, selbst wenn die führende Ziffer jeweils 0 ist.
Schließlich, wer möchte eine hexadezimale Zahl wie 7B ausdrücken
16 unter Verwendung eines Index? Terminals unterstützen nicht einmal Subskripte. Selbst bei einem Textverarbeitungsprogramm ist es ein Ziehen, um Schriftarten in den und aus dem Subscript-Modus zu wechseln, nur um zwei lausige Ziffern einzugeben.
Daher verwenden Programmierer (keine Narren, sie) die Konvention, eine Hexadezimalzahl mit einer 0x zu beginnen. Somit wird 7B 0x7B. Unter Verwendung dieser Konvention ist die Hexadezimalzahl 0x7B gleich 123 dezimal, während 0x123 hexadezimal gleich 291 dezimal ist. Der Codefragment cout << "0x7B =" << 0x7B << endl; cout << "0x123 =" << 0x123 "endl; erzeugt die folgende Ausgabe: 0x7B = 123 0x123 = 291 Sie können alle mathematischen Operatoren für hexadezimale Zahlen genauso verwenden wie für Dezimalzahlen.
Wenn Sie wirklich wollen, können Sie Binärzahlen in C ++ '14 mit dem Präfix '0b' schreiben. Somit wird 123 zu 0b01111011.