Was ist das Hexadezimalsystem?

13

Was ist das Hexadezimalsystem und warum wird es beim Rechnen so häufig verwendet? Ich weiß, dass Computer 0en und 1en verwenden, um Daten zu speichern. Warum verwenden wir also Hexadezimalzahlen?

Justin Krejcha
quelle
13
Wenn nicht off-topic, wie kommt es, dass eine solche Grundfrage 5 Jahre nach dem Start von Super User kein Duplikat mehr ist?
Peter Mortensen
3
@PeterMortensen Noch seltsamer, es wurde noch nicht einmal auf einer der Schwesterseiten gefragt, zumindest nicht, dass ich finden kann.
Nzall
9
Möglicherweise muss es nicht gefragt werden, da Wikipedia eine ziemlich gute Antwort hat: en.wikipedia.org/wiki/Hexadecimal
Piers Myers
4
Warum so viele Gegenstimmen?
Vi.

Antworten:

31

Hexadezimal ist ein Zahlensystem, das beim Rechnen sehr verbreitet ist. Möglicherweise haben Sie schon einmal von Binärdaten gehört , die nur Einsen und Nullen enthalten.

Menschen benutzen meistens die Dezimalsystem (Basis 10), in dem wir 10 Ziffern haben:

0, 1, 2, 3, 4, 5, 6, 7, 8 und 9

Computer arbeiten jedoch nicht mit dem Dezimalsystem. Sie haben einen binären Zustand (etwas ist entweder wahr oder falsch) und arbeiten daher in der Basis 2 (Binärzahlen haben normalerweise das Präfix 0b), wobei die einzigen Ziffern 0 und 1 sind.

In früheren Tagen oktal (oder Basis 8) verwendet. Es war gut, weil "10" in der Basis 8 "0b1000" in binär war (10 in dezimal ist 1010 in binär). Beim Schreiben von Zahlen wird Oktal normalerweise das Präfix "0o" vorangestellt (in den meisten Programmiersprachen jedoch nur das Präfix "0"). Es heißt Basis 8, weil wir acht Ziffern haben.

Octal wird heute noch verwendet, hauptsächlich zum Festlegen von Berechtigungen unter Unix und Linux

Mit der Zeit brauchten wir eine einfachere Möglichkeit, größere Zahlen darzustellen, da Rechenleistung und Speicherplatz schnell zunahmen. Es wurde zum Standard, hexadezimal oder zur Basis 16 zu verwenden, da 16 wie 8 eine Potenz von 2 ist, was die ziffernweise Konvertierung vereinfacht (siehe diesen Kommentar). Da es 16 Ziffern gibt, wurden Buchstaben für verwendet die anderen Ziffern Auch wird hex normalerweise mit 0x vorangestellt.

Hexadezimalzahlen sind auch nützlich, da eine Hexadezimalzahl 4 Bits (1 Oktalzahl kann 2 darstellen) und daher zwei Zahlen in einem Byte ist. In den meisten Hex-Editoren wird ein Byte so dargestellt.

Zählen

In der Basis 10 haben wir 10 Ziffern. Was machen wir nach 9? Wir haben keine Zahlen mehr. Wir erstellen links von der ursprünglichen Zahl eine "Zehnerstelle", die 1 ist und ganz rechts 0 wird. Dasselbe passiert auch hexadezimal:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11 usw

Bis wir zu 0x1F kommen, und dann wiederholt sich der Prozess bis zu 0xFF (255 in Dezimal) und dann bekommen wir 0x100. Weitere Informationen zum Zählen finden Sie hier .

Das folgende Diagramm zeigt die Konvertierungen zwischen Dezimal, Hexadezimal, Oktal und Binär: Hexadezimal-Umrechnungstabelle

Justin Krejcha
quelle
21
Der Hauptvorteil ist, dass Sie, da 16 eine Potenz von 2 ist, ziffernweise Konvertierungen durchführen können.
TRiG
2
Beachten Sie, dass viele Sprachen das 0Präfix und nicht 0ofür Oktalzahlen verwenden.
Ysap
2
Ihre Notiz, dass 16 ein Vielfaches von 2 ist, wurde fälschlicherweise aus dem Kommentar von TRiG übernommen. Ein Vielfaches zu sein ist nicht die relevante Beziehung.
Ryan Reich
2
@ justcool393, kann erwähnenswert sein, dass der Name für das, was Sie "Basis 10" nennen, tatsächlich "dezimal" ist. Dies kann dazu beitragen, die Beziehung zwischen der Basis 8 (oktal), der Basis 10 (dezimal) und der Basis 16 (hexadezimal) zu verdeutlichen.
HalosGhost
3
Arrrg. Jede Basis ist Basis 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr
4

Was ist das Hexadezimalsystem?

Das Hexadezimalsystem ist das Basis-16-Nummerierungssystem, das 16 Ziffern ( 0123456789ABCDEF) verwendet, im Gegensatz zu Binär, das 2 ( 01) verwendet, oder Dezimal, das 10 (0-9) verwendet. Da es in unserem System nur 10 Ziffern gibt, werden die Buchstaben von A bis F verwendet, um stattdessen "Ziffer 10", "Ziffer 11" usw. zu beschreiben.

Warum wird es so oft in der Datenverarbeitung eingesetzt?

16 ist eine Potenz von 2, mit der sich Hexadezimalzahlen leicht in Binärzahlen umwandeln lassen. Wie Sie bereits bemerkt haben, verwenden Computer 0s und 1s zum Speichern von Daten. Da jede Ziffer genau 4 Datenbits speichert, kann eine hexadezimale Ziffer sehr einfach in 4 binäre Ziffern (1 Bit) umgewandelt werden und umgekehrt.

| hex bin  | hex bin  |
| 0   0000 | 8   1000 |
| 1   0001 | 9   1001 |
| 2   0010 | A   1010 |
| 3   0011 | B   1011 |
| 4   0100 | C   1100 |
| 5   0101 | D   1101 |
| 6   0110 | E   1110 |
| 7   0111 | F   1111 |

Wie kommt es, dass wir hexadezimal verwenden?

Es macht es einfacher als binär, große Zahlen darzustellen. Nur zwei hexadezimale Ziffern können 256 verschiedene Werte darstellen, wie in:

dec  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...

Vier Hexadezimalstellen können 65536-Werte usw. darstellen. Hex erleichtert das Untersuchen von Daten mit Hexdumps erheblich , da Buchstaben, Zahlen und Interpunktionszeichen in einem Format gespeichert werden, das jedes Zeichen einer Zahl zwischen 0 und 256 zuordnet ( ASCII genannt oder manchmal mit anderen Codierungen). Darüber hinaus sind viele andere Dateiformate (wie PNG) so zugeschnitten, dass jede Information, aus der die Datei besteht, 256 Bit enthält.

Zusammenfassend ist 16 eine Potenz von 2 und 256 eine Potenz von 16. Dies macht es zu einer guten Möglichkeit, sowohl Binärzahlen als auch Text oder andere Daten darzustellen.

Türknauf
quelle
2

Was ist das Hexadezimalsystem?

Wenn Sie eine Zahl abcd haben, entspricht dies ((a * + b) + c) + d. Das ist also wie folgt:

  • abcd (binär) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (oktal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (dezimal) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (hexadezimal) = ((a * 16 + b) * 16 + c) * 16 + d

In einem Hexadezimalsystem benötigen Sie 16 Stellen, es stehen jedoch nur zehn Stellen zur Verfügung (0..9). Für die fehlenden 6 Ziffern werden die Zeichen A..F mit A = 10, ..., F = 15 verwendet.

Natürlich könnte man auch an viele andere Zahlensysteme denken, zum Beispiel mit einer Basis von 5 oder 7.

Bei der Berechnung mit Zahlen spielt es keine Rolle, welche Basis Sie verwenden. Sie können im Binärsystem addieren und multiplizieren, Sie können es im Dezimalsystem und Sie können es im Hexadezimalsystem tun. Wir werden verwendet, um im Dezimalsystem zu berechnen, Computer tun dies im Binärsystem.

Warum wird das Hexadezimalsystem beim Rechnen so häufig verwendet?

Wie oben erwähnt, spielt es keine Rolle, in welchem ​​Zahlensystem Sie eine Zahl eingeben. Die zugrunde liegende Zahl ist dieselbe, nur die Darstellung ändert sich. Der Computer speichert und verwendet intern immer binäre Zahlen (z. B. mit Zahlen rechnen).

Warum verwenden Programmierer (wie ich) unterschiedliche Zahlensysteme? Es gibt zwei Gründe, ein Zahlensystem basierend auf einer Potenz von 2 zu wählen. Erstens ist es die Kürze und zweitens ist es eine gute Ansicht, welche Bits gesetzt sind.

Kürze

Wenn ich eine Funktion habe, die den Inhalt eines Puffers in die Konsole schreibt, könnte ich Code schreiben, der in einer 1 bis 3-stelligen Dezimalzahl gedruckt wird (Dezimalzahl: 0..255). Wenn ich die Zahl im Binärformat schreibe, würde ich am Ende 1 bis 8 Ziffern ausgeben (binär: 0..11111111). Ich könnte auch das Oktalsystem verwenden und am Ende 1 bis 3 Ziffern (Oktal: 0..377) oder Hexadezimal mit 1 bis 2 Ziffern (Hexadezimal: 0..ff) erhalten.

Dies war nur für ein Byte. Angenommen, Sie möchten eine 32-Bit-Zahl schreiben:

  • binär: 0..11111111111111111111111111111
  • Oktal: 0..37777777777
  • Dezimalzahl: 4294967295
  • hexadezimal: 0..ffffffff

Wie Sie sehen, ist die hexadezimale Ausgabe die kürzeste.

Bits sehen

Ein übliches Muster zum Speichern gepackter Informationen besteht darin, jedes Bit in einem Byte einzeln zu verwenden. Nehmen wir zum Beispiel Dateiattribute (siehe MDSN ). Sie möchten die Attribute "hidden", "archive", "readonly", "temporary" und andere. Sie können jedes Attribut in einem Byte speichern oder die Informationen in ein Byte (oder mehrere Bytes) packen, wobei jedes Bit genau ein Attribut darstellt. Wenn Sie sich die DwFlagsAndAttributes in dem MSDN-Artikel ansehen, können Sie feststellen, dass Windows dieses Muster verwendet.

Um auf der MSDN-Seite zu bleiben, nehmen wir FILE_ATTRIBUTE_ENCRYPTEDein Beispiel: Dieses Flag ist dezimal 16384 und hexadezimal 0x4000. Das führende "0x" ist nur die Konvention eines C-Programmierers zum Markieren von Hexadezimalzahlen. Wir betrachten also nur 4000. Wenn Sie wissen möchten, welche Bits gesetzt sind, müssen Sie 16384 zuerst in Binärdaten konvertieren - nichts, was Sie könnten normalerweise tun mit geistiger Arithmetik. Aber nehmen wir hexadezimal 4000. Das ist ganz einfach. 16 ist 2 * 4, jede hexadezimale Zahl entspricht also genau 4 Bits. Dafür konvertieren wir nur 4 in binär 0100 und die Nullen in binär 0000 und wir sind fertig.

Oft geht es nicht um einzelne Bits, aber Programmierer tendieren dazu, Dinge auf Potenzen von 2 auszurichten. Wir möchten Programme nicht auf eine zufällige Adresse laden, sondern auf eine Adresse mit den 16 niedrigstwertigen Bits, die auf Null gesetzt sind. Wenn Sie also eine Adresse 0x12345678 haben, können Sie leicht erkennen, dass diese Adresse zu dem Programm gehört, das in 0x1234 geladen wurde, und nicht zu dem Programm, das in 0x03810000 geladen wurde.

Bevorzugen Sie binär, oktal oder hexadezimal?

Das ist eine Frage des Geschmacks. Wenn Sie direkt die binären Bits sehen möchten, ist dies möglicherweise in Ordnung. Bei langen Zahlen kann die Binärzahl frustrierend sein, wenn Sie die Ziffern zählen müssen, um festzustellen, ob Bit 23 oder Bit 24 gesetzt sind. Dies ist mit hexadezimal einfacher, da jede Ziffer 4 Bits darstellt, sodass Sie weniger zählen müssen. Persönlich benutze ich selten Oktal. Es ist sehr ungewöhnlich.

Aber warum nicht Base 32 verwenden?

Die Basis 32 ist eine Potenz von 2, das ist großartig. Aber Sie benötigen 32 Ziffern wie 0..9, A..V. Dies sind viel mehr zu merkende Ziffern (können Sie leicht erkennen, auf welche Zahl 'S' geantwortet wird?). Eine weitere Einschränkung ist, dass Sie mit der Basis 32 die nette Eigenschaft verlieren, dass zwei hexadezimale Ziffern genau ein Byte sind. Dies ist sehr praktisch, wenn Sie sich den Speicherinhalt ansehen! Auch bei Basis 32 benötigen Sie noch 2 Ziffern, um die Werte darzustellen, die ein Byte haben kann. Für einen 32-Bit-Wert benötigen Sie nur 7 Stellen anstelle von 8 hexadezimalen Stellen, aber das ist nicht so viel, um mit den Nachteilen des Basis-32-Systems zu leben.

Werner Henze
quelle
1

Verschiedene heute verwendete Zahlendarstellungssysteme sind (= include):
binär, oktal, dezimal und hexadezimal.
Die Auswahl hängt häufig von der Benutzerfreundlichkeit der jeweiligen Aufgabe ab.

Binär wird in Computersystemen und in der Digitaltechnik im Allgemeinen verwendet, da es in der Elektronik leicht darzustellen ist. Funktionen für Basis-2-Zahlen sind einfach zu erstellen, ebenso wie die Darstellung von Ein / Aus, Wahr / Falsch oder anderen ähnlichen sich wiederholenden Informationen mit zwei Zuständen.

octal ist schön zu haben, wenn es Gruppen mit drei Binärziffern gibt, wie es zB in den Berechtigungseinstellungen unter Unix / Linux der Fall ist.

Das Überspringen der Dezimalzahl für einen Moment ist hexadezimal genau wie oktal, aber für vier Binärziffern und die Tatsache, dass 8 Bits, ein Byte, gut in zwei Hexadezimalziffern passen. ( = die Antwort )
Daraus folgt, dass die geraden 8-Bit-Gruppen in einem Computer leicht aufgeschrieben, dargestellt und verstanden werden können - das heißt; Sehr praktisch im täglichen Gebrauch beim Schreiben von Software, beim Umgang mit Daten (z. B. RGB-Farbwerte in HTML / CSS), beim Bilden von Datenstrukturen und Ähnlichem.

dezimal . Man könnte vermuten, dass sich das Dezimalsystem aus der Tatsache entwickelt hat, dass wir zehn Finger und Zehen haben. Eine einzelne Ziffer steht für die Anzahl der gezählten Elemente, eine für jeden Finger bis zu maximal zehn.

Dies sind Zahlensysteme mit einer Basis von:
2, 8, 10 und 16.

Im Allgemeinen gibt die Basis an, wie viele einstellige "Elemente" Sie zählen dürfen, z. B. binär hat zwei, dezimal hat zehn.
Da hexadezimal 16 einstellige Elemente enthält, benötigt das System 16 "Zahlen", wobei 0-9 und af (6 zusätzliche im Vergleich zur Dezimalzahl) verwendet werden, wobei "a" 10 und "f" 15 im Dezimalsystem entspricht.

Um mit dem allgemeinen Modus fortzufahren: Jede Basis 2 oder höher funktioniert so gut wie alles andere, solange Sie eine schöne einstellige Darstellung haben.

Zahlen in Dezimalzahlen setzen sich zusammen aus:

... d * 10³ + c * 10² + b * 10¹ + a * 10 & sup5 ;.

für eine Dezimalzahl "dcba" - mit d, c, b, a, ausgewählt aus 0123456789

Ändern Sie dies nun in:

... d * Base³ + c * Base² + b * Base¹ + a * Base⁰

und Sie haben eine allgemeinere Form, die zeigt, wie jede Basis 2 oder höher "funktioniert";
Beispiel: Eine fünfstellige Basis 5 könnte genauso praktisch sein wie die anderen oben genannten oder warum nicht ein zwölfstelliges System für die Zeit (12 Stunden = "10" Basis 12, wobei die erste "Dezimalzahl" welche angibt 1/12 [5 Minuten] einer Stunde ist es)

Hinweis: ¹²³ - hochgestellt 0123, wenn auf Ihrem Bildschirm etwas anderes angezeigt wird

Hannu
quelle
Gegenwärtig könnte dies ein "Stich" dessen sein, was es tatsächlich werden kann.
Hannu