Zahlensystem-Umrechner

Rechnet eine Zahl zwischen binär, oktal, dezimal, hexadezimal und jeder Basis von 2 bis 36 um — mit Zweierkomplement und anklickbarem Bitraster.

Breite
Binär
Oktal
Dezimal
Hexadezimal
Basis
Bits — zum Kippen anklicken

8 Bit breit, 8 gesetzt

Was dieses Werkzeug tut

Dieselbe Zahl lässt sich in vielen Basen schreiben, und Programmierer wechseln ständig zwischen vieren davon: binär, weil die Hardware das hält; hexadezimal, weil es eine lesbare Kurzschrift dafür ist; dezimal, weil Menschen so denken; und oktal, weil Dateirechte und einige ältere Systeme es noch verwenden. Tippen Sie einen Wert in eines der Felder, und die übrigen folgen — dazu ein weiteres Feld für jede Basis von 2 bis 36.

Was es von einem Schulrechner unterscheidet, sind der Breitenwähler und das Bitraster. Wählen Sie 8, 16, 32 oder 64 Bit, und negative Zahlen erhalten ihre echte Maschinendarstellung statt eines Minuszeichens, und jedes Bit wird anklickbar.

Was eine Basis eigentlich ist

Eine Basis sagt, wie viele Ziffern zur Verfügung stehen, bevor sie ausgehen und übertragen werden muss. Das Dezimalsystem hat zehn, also folgt auf 9 die 10. Das Binärsystem hat zwei, also folgt auf 1 die 10. Die Stelle jeder Ziffer ist eine Potenz der Basis, und das ist schon alles:

1011           # die Zahl, zur Basis 2
1 x 8 = 8      # Bit 3
0 x 4 = 0      # Bit 2
1 x 2 = 2      # Bit 1
1 x 1 = 1      # Bit 0
8+0+2+1 = 11   # die Summe, dezimal

Basen über zehn brauchen mehr als zehn Ziffernsymbole und borgen sich daher Buchstaben: Hexadezimal läuft 0-9 und dann a-f, wobei a für 10 und f für 15 steht. Das geht bis zur Basis 36, die jede Ziffer und jeden Buchstaben verwendet — die größte Basis, die sich mit dem einfachen Alphabet schreiben lässt, und der Grund, warum dieses Werkzeug dort endet.

Warum ausgerechnet hexadezimal

Hex ist aus einem bestimmten Grund beliebt: 16 ist 2 hoch 4, also deckt genau eine Hexziffer genau vier Bit ab. Damit wird die Umrechnung zwischen Hex und Binär zum Nachschlagen ohne Rechnen — jede Hexziffer entfaltet sich zu ihren eigenen vier Bit, unabhängig von den Ziffern daneben.

d    e    a    d
1101 1110 1010 1101   # jede Hexziffer ist ihr eigenes Nibble

Oktal funktioniert genauso mit drei Bit je Ziffer, denn 8 ist 2 hoch 3 — weshalb Unix-Rechte oktal sind: drei Rechtebits je Benutzergruppe passen genau in eine Ziffer. Dezimal hat keine solche Beziehung zum Binären, weshalb die Umrechnung dazwischen echte Division statt Nachschlagen verlangt.

Deshalb ist das Binärfeld hier in Vierergruppen und das Hexfeld in Paaren gegliedert: Die Gruppen fallen mit den Grenzen zusammen, auf die es ankommt, sodass sich ein Nibble oder ein Byte ohne Zählen ablesen lässt.

Negative Zahlen und Zweierkomplement

Eine negative Zahl hat für sich genommen keine Binärform. In einem Register gibt es kein Minuszeichen — nur Bits —, das Vorzeichen muss also in den Bits selbst stecken, und dafür muss feststehen, wie viele Bits es gibt. Darum existiert der Breitenwähler, und darum ändert sich die Antwort, wenn Sie ihn umstellen.

Das Verfahren, das jede moderne Maschine nutzt, ist das Zweierkomplement: Man nimmt die positive Form, invertiert jedes Bit und addiert eins. Das Ergebnis ist, dass das oberste Bit „negativ“ bedeutet und die gewöhnliche Addition ohne Sonderfall für Vorzeichen weiterfunktioniert.

0000 0101   # 5
1111 1010   # jedes Bit invertiert
1111 1011   # plus eins: -5 als Byte, oder fb in Hex

Verbreitern Sie das Register, erhält dieselbe Zahl ein anderes Muster: -5 ist fb bei 8 Bit, fffb bei 16 und fffffffb bei 32. Der Wert hat sich nicht geändert; die Anzahl der Bits, die ihn tragen, schon. Der Breitenwechsel in diesem Werkzeug zeigt genau das.

Warum 0xFF zugleich 255 und -1 ist

Die Bits ff sagen nicht, ob sie vorzeichenbehaftet sind. Ein Byte mit 1111 1111 liest sich als 255, wenn der ladende Code einen vorzeichenlosen Typ deklariert hat, und als -1 bei einem vorzeichenbehafteten. Nichts im Byte selbst unterscheidet die beiden — der Typ ist eine Behauptung des Programms über Bits, die diese Information nicht tragen.

Daraus entsteht eine ganze Familie echter Fehler: eine Prüfsumme, die negativ herauskommt; ein aus einer Datei gelesenes Byte, das als kleiner null vergleicht; ein C-char, der sich auf ARM anders verhält als auf x86, weil seine Vorzeichenbehaftung implementierungsabhängig ist. Wann immer sich die vorzeichenbehaftete und die vorzeichenlose Lesart unterscheiden, zeigt dieses Werkzeug beide — denn die Abweichung ist meist genau das, wonach Sie gesucht haben.

Das Bitraster

Jedes Bit des aktuellen Werts wird mit seiner Position gezeigt, und ein Klick kippt es. Die Basen aktualisieren sich sofort, was einige Fragen deutlich leichter beantwortbar macht als von Hand:

  • Welches Bit ist in diesem Flag-Wert gesetzt — klicken Sie sich durch und lesen Sie die Positionen ab.
  • Wie lautet die Maske für Bit 4 und 7 — setzen Sie diese beiden und lesen Sie den Hexwert.
  • Was macht das Setzen des obersten Bits mit einem vorzeichenbehafteten Wert — es macht ihn sichtbar negativ.
  • Ist dieser Wert eine Zweierpotenz — eine Zweierpotenz hat genau ein gesetztes Bit.

Bit 0 ist das niederwertigste Bit und steht rechts; das ist die allgemeine Konvention und der Grund, warum das Raster auch auf einer von rechts nach links gelesenen Seite von links nach rechts bleibt. Die Reihen sind acht Bit breit, damit Bytegrenzen auf einen Blick sichtbar sind.

Große Zahlen bleiben exakt

JavaScript-Zahlen sind Doubles und halten ganze Zahlen nur bis 2^53 exakt — rund 9 Billiarden. Ein 64-Bit-Wert kann das überschreiten, und ein auf gewöhnlichen Zahlen gebauter Umrechner rundet ihn stillschweigend und liefert eine Hexzeichenkette, die plausibel aussieht und in den letzten Stellen falsch ist.

Hier rechnet alles mit Ganzzahlen beliebiger Genauigkeit, sodass ein voller 64-Bit-Wert exakt umgerechnet wird. Der Modus beliebiger Genauigkeit geht weiter und hebt die Grenze ganz auf — nützlich für kryptografische Werte und große Bezeichner —, aber beachten Sie: Ohne feste Breite gibt es kein Zweierkomplement, sodass eine negative Zahl in diesem Modus schlicht in jeder Basis ein Minuszeichen trägt.

Häufig gestellte Fragen

Warum erscheint -5 als fb statt als -101 im Binären?
Weil ein Register kein Minuszeichen kennt. Mit gewählter Breite werden negative Zahlen im Zweierkomplement gezeigt, also so, wie die Maschine sie tatsächlich speichert: -5 in einem Byte ist 1111 1011, also fb. Wenn Sie die mathematische Form mit Vorzeichen wollen, stellen Sie die Breite auf beliebige Genauigkeit um.
Ist 0xFF nun 255 oder -1?
Beides — die Bits sind identisch, und allein der deklarierte Typ entscheidet. Ein vorzeichenbehafteter 8-Bit-Wert liest ff als -1, ein vorzeichenloser als 255. Sobald sich die beiden Lesarten unterscheiden, zeigt das Werkzeug sie nebeneinander.
Warum wird Hexadezimal so viel benutzt statt Dezimal?
Weil eine Hexziffer genau vier Bit ist: Hex und Binär rechnen sich durch Nachschlagen ohne Arithmetik um, und die Ziffern fallen mit Bytegrenzen zusammen. Dezimal hat diese Beziehung zum Binären nicht, ein Dezimalwert sagt daher nichts darüber aus, welche Bits gesetzt sind.
Was ist hier die höchste Basis, und warum 36?
36, denn das sind 10 Ziffern plus 26 Buchstaben — alle Symbole, die das einfache lateinische Alphabet bietet. Höher zu gehen erforderte eine Übereinkunft, welche zusätzlichen Zeichen zu verwenden sind, und eine allgemein anerkannte gibt es nicht.
Kann ich einen Wert mit 0x oder Leerzeichen einfügen?
Ja. Die Präfixe 0x, 0b und 0o werden in ihrer jeweiligen Basis akzeptiert, und Leerzeichen sowie Unterstriche werden ignoriert — Sie können also direkt aus Code oder einem Datenblatt einfügen, ohne vorher aufzuräumen.
Wird ein 64-Bit-Wert exakt umgerechnet?
Ja. Die gesamte Arithmetik nutzt Ganzzahlen beliebiger Genauigkeit, sodass Werte oberhalb von 2^53 — wo eine gewöhnliche JavaScript-Zahl zu runden beginnt — exakt bleiben.
Wird etwas von dem, was ich eingebe, an einen Server gesendet?
Nein. Es ist Arithmetik in Ihrem Browser; nichts wird hochgeladen oder protokolliert, und es funktioniert ohne Netzverbindung.