Zahlensysteme umrechnen
Dieses Tool konvertiert in Ihrem Browser zwischen Binär-, Oktal-, Dezimal- und Hexadezimalzahlen sowie jeder Basis von 2 bis 36. Ganzzahlen laufen durchgängig durch BigInt statt durch einen Double, weil parseInt für 9007199254740993 stillschweigend 9007199254740992 zurückgibt – und die Werte, die Leute umrechnen, sind IDs, Bitmasken und Hashes, also genau das Material, das diese Grenze überschreitet.
Geben Sie oben eine Zahl ein oder laden Sie ein Beispiel, um sie in Binär-, Dezimal-, Hexadezimal- und andere Basen umzuwandeln.
Wie funktioniert Zahlensysteme umrechnen?
Basisumrechnung sieht wie ein Einzeiler aus und hört an zwei Stellen auf, einer zu sein: große Ganzzahlen und Brüche.
parseInt verliert Ziffern, stillschweigend
parseInt("9007199254740993", 10) gibt 9007199254740992 zurück. Nichts wirft einen Fehler, nichts warnt, und die letzte Ziffer ist einfach weg – denn eine JavaScript-Zahl ist ein Double, und 2 53 ist die Stelle, an der aufeinanderfolgende Ganzzahlen nicht mehr darstellbar sind. Was Leute zwischen Basen umrechnen, sind Snowflake-IDs, Berechtigungs-Bitmasken, Hashes und Speicheradressen, und jedes davon übersteigt diese Grenze routinemäßig. Der Ganzzahl-Pfad läuft hier deshalb von Parsen bis Formatieren durch BigInt und geht nie durch einen Double zurück.
Brüche werden durch wiederholte Multiplikation umgerechnet
BigInt hat keinen gebrochenen Teil, also wird der Bruch separat behandelt: die Nachkommastellen mit der Zielbasis multiplizieren, den Übertrag als nächste Ausgabeziffer nehmen, wiederholen. Die gesamte Arithmetik bleibt auf Ganzzahlen in der Ausgangsbasis, sodass nichts durch einen Float geht – deshalb kommt 0.1 in Basis 3 hier als exakt 0.1 heraus und nicht als 0.3333333333333333.
Manche Brüche enden in der Zielbasis nie: 0.1 dezimal ist binär 0.0001100110011…, endlos wiederkehrend – dieselbe Tatsache, die hinter 0.1 + 0.2 !== 0.3 steckt. Nichts kann das beheben, deshalb wird die Entwicklung bei vierzig Ziffern begrenzt und stoppt dann.
Ein führendes 0x , das nicht zur Basis passt, ist ein Fehler
Wer 0x1f einfügt, während Basis 10 gewählt ist, meint fast sicher Basis 16. 0 und x als Ziffern zu behandeln würde entweder verwirrend scheitern oder eine falsche Antwort liefern; deshalb wird die Diskrepanz beim Namen genannt. Zifferntrenner – Unterstriche und Leerzeichen – werden akzeptiert, denn 1010_1010 ist so, wie Leute tatsächlich ein Byte schreiben.
Das Zweierkomplement ist der Grund, warum -1 als ffffffff gelesen wird
Eine negative Ganzzahl liegt im Speicher als ihr Zweierkomplement: die Bits invertieren und eins addieren. -1 in 32 Bits ist also ffffffff, und -2147483648 ist 80000000. Wenn ein Debugger Ihnen einen riesigen positiven Hexwert zeigt, wo Sie eine kleine negative Zahl erwartet haben, ist genau das passiert. Das Panel zeigt die Kodierung in der schmalsten Breite, die den Wert fasst.
Gesetzte Bits, bei einem Wert, der als Maske dient
Eine Berechtigungs-Ganzzahl ist eine Menge von Flags, und die nützliche Frage ist, welche davon an sind. Die Bitpositionen werden aufgelistet, gezählt ab null am niederwertigsten Bit – die Konvention, die jede Bit-Shift-Operation verwendet.
Eingabe
255 (base 10)
Konvertiert
binary 1111 1111 octal 377 hexadecimal ff set bits 0, 1, 2, 3, 4, 5, 6, 7
Welche Optionen und Sonderfälle unterstützt Zahlensysteme umrechnen?
| Parameter | Typ | Standard | Verhalten & Sonderfälle |
|---|---|---|---|
| Bereich der Basis | 2 bis 36 | — | Ziffern sind 0–9 dann a–z, case-insensitive, was 36 Symbole ergibt. Basis 36 ist die dichteste Kodierung, die nur alphanumerische Zeichen verwendet. |
| Genauigkeit | beliebig | BigInt | Ganzz beliebige Längen von Ganzzahlen werden exakt umgerechnet. parseInt verliert Ziffern über 2^53 ohne Warnung, was der häufigste Fehler in Basis-Konvertern ist. |
| Brüche | wiederholte Multiplikation | max. 40 Ziffern | Exakt, wenn der Bruch im Zielbasis-System endet. Wenn er nicht endet – wie 0,1 dezimal im Binärsystem – ist die Entwicklung begrenzt und nicht unendlich. |
| Trennzeichen | _ und Leerzeichen | akzeptiert | 1010_1010 und 1010 1010 werden beide analysiert. Ihre Ablehnung wäre Pedanterei; so schreiben Menschen ein Byte. |
| Präfixe | 0b 0o 0x | geprüft | Werden akzeptiert, wenn sie mit der ausgewählten Basis übereinstimmen, und als Fehler gemeldet, wenn sie nicht übereinstimmen – das Einfügen von 0x1f mit Basis 10 ist ein benennenswerter Fehler. |
| Gruppierung | Boolesch | an | Alle 4 Ziffern im Binärsystem, 3 im Oktal- und Dezimalsystem, 2 im Hexadezimalsystem – die Gruppierungen, die dem Lesefluss jeder Basis entsprechen. |
| Zweierkomplement | 8/16/32/64-Bit | schmalste passende Breite | Wie ein negativer Wert tatsächlich gespeichert wird, weshalb -1 in einem Debugger als ffffffff erscheint. |
| Bit-Breite | mit und ohne Vorzeichen | gemeldet | Welches von int8 bis uint64 den Wert aufnehmen kann. Ein Wert, der in int32 passt, aber nicht in int16, ist genau die Art von Information, die man vor der Wahl eines Spaltentyps kennen sollte. |
Häufig gestellte Fragen
Warum liefern andere Konverter bei einer langen Zahl ein anderes Ergebnis?
Weil sie parseInt oder Number verwendet haben, die durch einen Double gehen und jenseits von 2^53 an Genauigkeit verlieren – das sind rund 9,007 Billiarden. parseInt("9007199254740993") gibt 9007199254740992 zurück, ohne Fehler. Dieses Tool nutzt durchgängig BigInt, sodass jede Ziffer überlebt. Wenn Sie eine Snowflake-ID, einen Hash oder eine große Bitmaske umrechnen, ist das der Unterschied, der zählt.
Warum lässt sich 0.1 nicht sauber ins Binäre umrechnen?
Weil es nicht geht. Ein Zehntel ist in Basis 2 0.0001100110011…, endlos wiederkehrend, aus demselben Grund, aus dem ein Drittel in Basis 10 0.333… ist: Der Nenner hat einen Primfaktor, den die Basis nicht hat. Das ist die ganze Erklärung für 0.1 + 0.2 !== 0.3 in jeder Sprache mit binärer Gleitkommazahl. Die Entwicklung stoppt hier bei vierzig Ziffern, weil sie irgendwo stoppen muss.
Warum wird -1 als ffffffff angezeigt?
Das ist Zweierkomplement, und so speichert praktisch jeder Computer eine negative Ganzzahl: die Bits des Betrags invertieren und eins addieren. Es hat die angenehme Eigenschaft, dass Addition bei vorzeichenbehafteten und vorzeichenlosen Werten identisch funktioniert – deshalb hat es sich gegen die Alternativen durchgesetzt. Wenn ein Debugger einen verdächtig großen positiven Hexwert zeigt, wo Sie eine kleine negative Zahl erwartet haben, schauen Sie genau auf das.
Wofür ist Basis 36 da?
Kompakte Bezeichner. Basis 36 verwendet 0-9 und a-z – das ist das größte Alphabet, das es überlebt, in Kleinschreibung umgewandelt, von einem Menschen getippt und ohne Kodierung in eine URL gesetzt zu werden. Ein Zeitstempel in Basis 36 ist etwa halb so lang wie dezimal. Basis 62 ist dichter, aber schreibungsabhängig, was es überall zerbrechlich macht, wo kleingeschrieben wird.
Kann ich das Bitmuster einer Gleitkommazahl umrechnen?
Nicht direkt – dies rechnet den mathematischen Wert um, nicht die IEEE-754-Kodierung. Das sind verschiedene Fragen: 0.5 als Wert ist binär 0.1, während 0.5 als Double hexadezimal 3FE0000000000000 ist. Wenn Sie das Bitmuster wollen, rechnen Sie den Hexwert der kodierten Form als Ganzzahl um.
Wird meine Zahl hochgeladen?
Nein. Es ist Arithmetik und läuft in Ihrem Browser. Nichts an der Umrechnung von 255 in Hexadezimal verlangt einen Server, und die Zahlen, die Leute umrechnen, sind häufig interne Bezeichner, die sie lieber nicht im Log eines anderen sehen möchten.