Warum werden Hexadezimalzahlen vorangestellt 0x
? Ich verstehe die Verwendung des Präfixes, aber ich verstehe nicht, welche Bedeutung es hat, warum 0x
gewählt wurde.
Warum werden Hexadezimalzahlen vorangestellt 0x
? Ich verstehe die Verwendung des Präfixes, aber ich verstehe nicht, welche Bedeutung es hat, warum 0x
gewählt wurde.
Antworten:
Kurzgeschichte: Der 0
erzählt dem Parser, dass es sich um eine Konstante handelt (und nicht um eine Kennung / ein reserviertes Wort). Es ist noch etwas erforderlich, um die Zahlenbasis anzugeben: Das x
ist eine willkürliche Wahl.
Lange Geschichte: In den 60er Jahren waren die vorherrschenden Programmiernummernsysteme dezimal und oktal - Mainframes hatten 12, 24 oder 36 Bit pro Byte, was durch 3 = log2 (8) gut teilbar ist.
Die BCPL-Sprache verwendete die Syntax 8 1234
für Oktalzahlen. Als Ken Thompson B aus BCPL erstellte, verwendete er 0
stattdessen das Präfix. Das ist toll, weil
0
ist in beiden Basen gleich).00005 == 05
) und#123
).Als C aus B erstellt wurde, entstand der Bedarf an Hexadezimalzahlen (der PDP-11 hatte 16-Bit-Wörter) und alle oben genannten Punkte waren noch gültig. Da für andere Maschinen noch Oktale benötigt wurden, 0x
wurde diese willkürlich gewählt ( 00
wurde wohl als umständlich ausgeschlossen).
C # ist ein Nachkomme von C und erbt daher die Syntax.
0x
über 00
war Präferenz / Ungeschicklichkeit. 00
würde vorhandenen Code brechen. 0010
wie oktal ist 8
, während 0010
wie hexidezimal wäre 16
. Sie konnten keine Zahl als Indikator für eine zweite Ziffer verwenden (außer 8
oder 9
und haben auch keine hexadezimale Bedeutung), daher ist ein Buchstabe ein Muss. Und das lässt entweder 0h
oder 0x
( H e X idecimal). Von diesem Punkt an scheint es wirklich wieder die Präferenz zu sein.
0
Präfixes für Oktal hat im Laufe der Jahre so viele Probleme verursacht. Insbesondere in Ländern wie Großbritannien, in denen Telefonnummern mit a beginnen 0
. Javascript und viele andere Sprachen würden diese als oktal analysieren und die Zahl vor dem Speichern entstellen. Um den Spaß zu steigern, würde ein beliebtes Datenbankprodukt stillschweigend zur Dezimalanalyse zurückkehren, wenn die Zahl ein 8
oder enthält 9
.
Hinweis: Ich kenne die richtige Antwort nicht, aber das Folgende ist nur meine persönliche Spekulation!
Wie bereits erwähnt, bedeutet eine 0 vor einer Zahl, dass sie oktal ist:
04524 // octal, leading 0
Stellen Sie sich vor, Sie müssten ein System zur Bezeichnung von Hexadezimalzahlen entwickeln und beachten, dass wir in einer Umgebung im C-Stil arbeiten. Wie wäre es mit einer Montage? Leider können Sie nicht - es würde Ihnen ermöglichen, Token zu erstellen, die gültige Bezeichner sind (z. B. Sie könnten eine Variable gleich benennen), was zu einigen bösen Zweideutigkeiten führen würde.
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
Sie können aus demselben Grund nicht mit einem Charakter führen:
xFF00 // also valid identifier
Die Verwendung eines Hashs wurde wahrscheinlich verworfen, weil er mit dem Präprozessor in Konflikt steht:
#define ...
#FF00 // invalid preprocessor token?
Am Ende entschieden sie sich aus irgendeinem Grund, ein x nach einer führenden 0 zu setzen, um hexadezimal zu bezeichnen. Es ist eindeutig, da es immer noch mit einem Zahlenzeichen beginnt und daher kein gültiger Bezeichner sein kann. Es basiert wahrscheinlich auf der Oktalkonvention einer führenden 0.
0xFF00 // definitely not an identifier!
0xFFAB1234
muss geschrieben werden als 0FFAB1234h
. Ich erinnere mich an Inline Asm in Pascal, als ich jung war stackoverflow.com/q/11733731/995714
Es ist ein Präfix, das angibt, dass die Zahl hexadezimal und nicht in einer anderen Basis angegeben ist. Die Programmiersprache C verwendet es, um den Compiler zu informieren.
Beispiel:
0x6400
übersetzt in 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
Wenn der Compiler liest 0x6400
, versteht er, dass die Zahl mit Hilfe des 0x- Terms hexadezimal ist . Normalerweise können wir unter (6400) 16 oder (6400) 8 oder was auch immer verstehen .
Für Binär wäre es:
0b00000001
Hoffe ich habe irgendwie geholfen.
Schönen Tag!
x6400
? Das x
könnte immer noch verwendet werden, um hexadezimal zu schließen.
Die vorhergehende 0 wird verwendet, um eine Zahl in Basis 2, 8 oder 16 anzugeben.
Meiner Meinung nach wurde 0x gewählt, um hex anzugeben, da 'x' wie hex klingt.
Nur meine Meinung, aber ich denke, es macht Sinn.
Schönen Tag!