Zahlensystem-Umrechner
Rechnet eine Zahl zwischen binär, oktal, dezimal, hexadezimal und jeder Basis von 2 bis 36 um — mit Zweierkomplement und anklickbarem Bitraster.
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.
Von binär nach dezimal und von dezimal nach binär
Binär und dezimal sind hier das einzige Paar ohne jede gemeinsame Beziehung: Zwei ist keine Potenz von zehn und zehn keine Potenz von zwei, also ist keine der beiden Richtungen ein Nachschlagen und beide verlangen echtes Rechnen. Es ist außerdem nicht dasselbe Rechnen — das schnelle Handverfahren in die eine Richtung ist nicht die Umkehrung des schnellen Handverfahrens zurück.
- Von binär nach dezimal, durch Verdoppeln: Beginnen Sie beim linkesten Bit mit null, verdoppeln Sie dann für jedes Bit das Bisherige und addieren Sie dieses Bit. Für 1011 ergibt das 1, 2, 5, 11 — ein einziger Durchgang, ohne sich Stellenwerte merken zu müssen, und genau so liest dieses Werkzeug, was Sie eintippen.
- Von binär nach dezimal, über die Stellen: Addieren Sie den Stellenwert jedes gesetzten Bits — das ist das ausgeführte Beispiel weiter oben. Schneller, wenn nur zwei oder drei Bit gesetzt sind, langsamer, wenn die meisten es sind.
- Von dezimal nach binär, durch Division: Dividieren Sie durch zwei und notieren Sie den Rest, wieder und wieder, bis nichts übrig ist — und lesen Sie die Reste dann von unten nach oben. Die Antwort kommt mit dem niederwertigsten Bit zuerst, weshalb sie beim Schreiben die ganze Zeit verkehrt herum aussieht.
- Von dezimal nach binär, durch Abziehen: Ziehen Sie die größte hineinpassende Zweierpotenz ab und wiederholen Sie das. 200 verliert 128 und lässt 72; 72 verliert 64 und lässt 8; 8 verliert 8 und lässt nichts — also sind die Bits an den Positionen 7, 6 und 3 gesetzt und das Byte ist 1100 1000. Schneller als die Division, sobald nur wenige Bit gesetzt sind.
Eines deckt hier kein Handverfahren ab: Eine negative Dezimalzahl hat überhaupt keine Binärform, solange keine Breite gewählt ist. Fragen Sie nach minus fünf in binär, ist die ehrliche Antwort eine Gegenfrage — wie viele Bit? Genau das entscheidet der Breitenwähler, und darum geht es im Abschnitt zum Zweierkomplement weiter oben. Im Modus beliebiger Genauigkeit gibt es keine Breite, also kommt das Minuszeichen einfach in jede Basis mit.
Von dezimal nach hexadezimal und zurück
Fast niemand, der das oft tut, dividiert durch sechzehn. Die Beziehung von Hex zum Binären ist die Abkürzung: Rechnen Sie die Dezimalzahl einmal in binär um, schneiden Sie die Bits von rechts in Vierergruppen und lesen Sie jede Gruppe als eine Hexziffer. Zurück ist derselbe Weg rückwärts — entfalten Sie jede Hexziffer in ihre vier Bit und addieren Sie die Stellenwerte der gesetzten. Bis zur Größe eines Bytes geht es noch kürzer: Die erste Hexziffer wiegt sechzehn der zweiten, also multiplizieren und addieren.
- 255 ist ff — ein Byte, in dem jedes Bit gesetzt ist. Das ist der eine Wert, den man auswendig können sollte, denn dort endet das Byte.
- 256 ist 100. Einen Schritt über ein volles Byte hinaus rollen die Ziffern über, genau wie 99 im Dezimalen auf 100 überrollt, und die Hexzahl gewinnt eine Stelle, die das Byte nicht fassen kann.
- 65535 ist ffff und 65536 ist 10000: dieselben zwei Marken ein Byte weiter oben, dort, wo ein Sechzehn-Bit-Zähler endet.
- 4096 ist 1000, und deshalb sehen Seitengrößen, Ausrichtungen und Speicheroffsets in Hex rund und in Dezimal zerfranst aus. Hex zählt in Vierergruppen von Bits, und die Hardware tut das auch.
Groß- und Kleinschreibung spielt keine Rolle: FF und ff sind derselbe Wert, das Werkzeug nimmt beides entgegen und gibt Kleinbuchstaben aus. Was es nicht tut, ist raten. Das Präfix 0x gehört zum Hexfeld und wird im Dezimalfeld zurückgewiesen statt stillschweigend verworfen, denn ein in der falschen Basis gelesener Wert ist der eine Fehler, den ein Umrechner niemals plausibel aussehen lassen darf.
Von oktal nach dezimal und die führende Null, die die Antwort ändert
Oktal überlebt an einer Stelle mehr als an jeder anderen: bei Dateirechten, wo drei Rechtebits je Benutzergruppe genau in eine Oktalziffer passen. Die Umrechnung nach dezimal ist schlichte Stellenwertrechnung mit Potenzen von acht — 755 oktal ist sieben Vierundsechziger plus fünf Achter plus fünf, also 493 —, und die Gegenrichtung ist Division durch acht mit von unten nach oben gelesenen Resten, dieselbe Form wie von dezimal nach binär und aus demselben Grund: Auch acht hat keine Beziehung zu zehn.
- 755 ist 493 dezimal, 644 ist 420 und 777 ist 511. Keine dieser Dezimalzahlen nützt irgendjemandem, und das ist der Punkt — Rechte werden oktal geschrieben, weil die Ziffern mit den Rechtebits zusammenfallen, nicht weil der Wert etwas zählt.
- Eine führende Null ist in C und in Python 2 ein Basiszeichen: 0755 ist dort oktal und damit die Zahl 493. Python 3 weist diese Schreibweise rundheraus zurück und verlangt stattdessen 0o755, was eine ganze Familie stiller Fehler beseitigt hat.
- YAML 1.1 liest ein nicht in Anführungszeichen gesetztes 0755 ebenfalls als 493 — weshalb ein Rechtemodus in einer Konfigurationsdatei in Anführungszeichen gehört, sonst ist er nicht mehr der Modus, den Sie geschrieben haben.
- JSON hat es nie erlaubt: Seine Grammatik verbietet eine führende Null in einer Zahl, 0755 ist dort also gar keine Zahl, sondern ein Parserfehler — das lauteste der drei Verhalten und das einzige, das sich nicht falsch lesen lässt.
Dieses Werkzeug sieht in einer führenden Null gar kein Zeichen. Die Basis bestimmt das Feld, in das Sie tippen: 0755 ist im Dezimalfeld 755 und im Oktalfeld 493, und das Präfix 0o wird im Oktalfeld angenommen und überall sonst zurückgewiesen. Die Basis aus einem Präfix zu erraten hieße, eine andere Zahl zurückzugeben als die eingegebene.
Von oktal nach hexadezimal: das Paar ohne Abkürzung
Beide sind Zweierpotenzen, beide sind also reines Umgruppieren derselben Bits — und doch ist dies das einzige Paar unter den vier Basen ganz ohne Ziffer-für-Ziffer-Regel. Eine Oktalziffer ist drei Bit, eine Hexziffer vier, und keine der beiden Zahlen teilt die andere, sodass die Grenzen nie zusammenfallen. Am Aufschreiben und Umgruppieren der Bits führt kein Weg vorbei.
- Schreiben Sie jede Oktalziffer der Reihe nach als ihre drei Bit: 755 wird zu 111 101 101.
- Gruppieren Sie diese Bits vom rechten Ende her zu Vierergruppen um und füllen Sie links mit Nullen auf, wenn die Anzahl nicht glatt aufgeht: 0001 1110 1101.
- Lesen Sie jede Vierergruppe als eine Hexziffer: 1ed. Am falschen Ende aufzufüllen ist hier der klassische Fehler, und er sieht nicht falsch aus — er vervielfacht die Antwort einfach still.
Dass zwei Hexziffern genau ein Byte sind und zwei Oktalziffern nicht, ist der ganze Grund, warum Hex das Oktale beim Lesen von Speicher verdrängt hat: Acht Bit sind zwei Oktalziffern und zwei Drittel, die Bytegrenze fällt also mitten in eine Ziffer. Oktal passte zu Maschinen, deren Wortbreite ein Vielfaches von drei Bit war; Hex passt zum Acht-Bit-Byte. Und auf dieser Seite ist das Bitraster für dieses Paar schneller als jedes Handverfahren — setzen Sie die Bits einmal, und beide Felder zeigen die Antwort bereits.
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.
- Wie rechne ich eine Binärzahl von Hand in eine Dezimalzahl um?
- Verdoppeln und addieren, von links: Beginnen Sie bei null und verdoppeln Sie für jedes Bit das Bisherige, dann addieren Sie das Bit. 1011 ergibt 1, dann 2, dann 5, dann 11. Das ist ein einziger Durchgang ohne zu merkende Stellenwerte, und dasselbe Verfahren funktioniert in jeder Basis — multiplizieren Sie mit der Basis, statt zu verdoppeln.
- Was ist 255 in Hex, und warum taucht diese Zahl ständig auf?
- ff. Es ist ein Byte mit allen acht gesetzten Bits, also der größte Wert, den ein Byte fasst, und der Punkt, an dem die Zählung in ein zweites Byte überrollt — weshalb sie in Farbkanälen, Masken und Größengrenzen überall vorkommt. Eins mehr ist 256, in Hex geschrieben 100.
- Ist 0755 dieselbe Zahl wie 755?
- Hier ja im Dezimalfeld und nein im Oktalfeld: Die Basis bestimmt das Feld, und eine führende Null ist bloß eine Ziffer null. Sonst hängt es von der Sprache ab — C und Python 2 lesen 0755 oktal, also 493; Python 3 weist die Schreibweise zurück und verlangt 0o755; YAML 1.1 liest sie als 493; JSON behandelt sie als Syntaxfehler.
- Wie rechne ich oktal in hexadezimal um?
- Über binär, denn einen kürzeren Weg gibt es nicht: drei Bit je Oktalziffer, vier je Hexziffer, und die beiden fallen nie zusammen. Entfalten Sie jede Oktalziffer in ihre drei Bit, gruppieren Sie die ganze Folge von rechts zu Vierergruppen um und lesen Sie jede Vierergruppe als Hexziffer — 755 wird zu 111 101 101, dann zu 0001 1110 1101, dann zu 1ed.
Verwandte Werkzeuge
- Datengrößen-Umrechner
Dieselbe Zahl, gelesen als Datenmenge statt als Bitmuster: Dort wird aus einer Byte-Zahl KB, MB und GB neben KiB, MiB und GiB — samt der Stelle, an der die beiden Systeme auseinandergehen.
- Prozentrechner
Eine Basis sagt, wie eine Zahl geschrieben wird; ein Prozentsatz sagt, wie groß sie neben einer anderen ist. Dort werden Anteile, Änderungen und Umkehrungen gerechnet, mit der Formel und Ihren eigenen Zahlen darin.