Online Zweierkomplement Rechner und Zahlensysteme Umrechner (ohne Javascript)
Dieses kleine Programm rechnet beliebig grosse Zahlen in die entsprechenden Dezimal-, Hexadezimal-, Binär- und Oktalwerte um. Die Anwendung ist einfach: Im obersten Feld den Wert eingetragen, Eingabetaste drücken und dann aus allen anderen Feldern den Wert herauslesen.
Von diesem Umrechner gibt es auch eine Javascript-Version.
Eingabe |
---|
Unsigned | ||||
---|---|---|---|---|
Dec | Hex | Bin | Oct | |
8 |
0
|
00
|
00000000
|
000
|
16 |
0
|
00 00
|
00000000 00000000
|
000000
|
32 |
0
|
00 00 00 00
|
00000000 00000000 00000000 00000000
|
000 00000000
|
64 |
0
|
00 00 00 00 00 00 00 00
|
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
000000 00000000 00000000
|
n |
0
|
00
|
00000000
|
000
|
Signed, 2's Complement | ||||
Dec | Hex | Bin | Oct | |
8 |
0
|
00
|
00000000
|
000
|
16 |
0
|
00 00
|
00000000 00000000
|
000000
|
32 |
0
|
00 00 00 00
|
00000000 00000000 00000000 00000000
|
000 00000000
|
64 |
0
|
00 00 00 00 00 00 00 00
|
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
|
000000 00000000 00000000
|
n |
0
|
00
|
00000000
|
000
|
Die Grösse der Werte wird nur durch die Berechnungszeit eingeschränkt: Wenn der Server länger wie 5 Sekunden zu rechnen hat, wird abgebrochen.
Für jeden eingegebenen Wert werden für Dezimal-, Hexadezimal-, Binär- und Oktalzahlen verschiedene Werte berechnet: Zum einen wird für jeden Wert das Zweierkomplement berechnet (jeweils die zweite Zeile). Zum anderen werden die Werte in verschiedenen Grössen angegeben: 1 Byte, 2 Byte, 4 Byte, 8 Byte und n Byte. Das letztere passt sich der Grösse des Wertes an, gibt also stets den kompletten Wert ohne Abschneiden, jedoch mit der minimalen Anzahl Bytes zurück. Für die anderen Grössen gilt, dass der Wert binär auf die entsprechende Anzahl (least significant) Bytes abgeschnitten wird.
Das 2er-Komplement der Dezimal-Darstellung zeigt die Zahlen mit oder ohne Vorzeichen an. In der jeweils ersteren Zeile wird die Zahl stets als unsigned angegeben (für die 1-Byte-Variante also den Zahlenraum 0 bis 255), in der zweiten Zeile (2-Complement) wird die Zahl stets als signed angegeben (für die 1-Byte-Variante somit der Zahlenraum -128 bis 127). Achtung: Das Resultat des 2-Complement muss nicht zwingendermassen die negative Variante der ersteren Zeile sein, denn durch das Abschneiden von überschüssigen Bytes kann es sein, dass die Werte komplett anders herauskommen.
Für die Eingabe gelten die folgenden Regeln:
- Dezimal: Es werden nur die Ziffern 0,1,2,3,4,5,6,7,8,9 akzeptiert. Vorzeichen kann keines eingegeben werden. Wenn also beispielsweise der Wert -23 binär gewünscht ist, so kann 23 eingegeben werden. Das Resultat steht dann beim Zweierkomplement.
- Hexadezimal: Es werden die Zeichen 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f sowie A,B,C,D,E,F akzeptiert.
- Binär: Es werden nur 0 und 1 akzeptiert.
- Oktal: Es werden nur die Ziffern 0,1,2,3,4,5,6,7 akzeptiert.
Alle Zeichen, welche nicht akzeptiert werden, werden schlicht überlesen. Der Wert CF(94n420n.=vc
ergibt im Dezimal-Feld eingegeben also folgenden Wert: "94420". Dadurch ist es möglich, auch anderweitig formatierte Werte ohne Probleme einzutragen: 94 420, 000094420, 0d94420. Vorsicht mit Dezimal-Punkt! Dieser wird ebenfalls nicht erkannt, was bedeutet, dass ein Wert wie beispielsweise 123.456 als 123456 angenommen wird.
Die Dezimal-, Hexadezimal- und Binärwerte werden bei der Ausgabe mit automatisch generierten Trennzeichen versehen.
Durch das Abschneiden der Zahlen entstehen manchmal scheinbar falsche Werte, diese sind jedoch korrekt, denn wenn beispielsweise bei einer 2-Byte-Zahl das vordere Byte abgeschnitten wird, so entspricht dies einer komplett anderen Zahl.
Wie rechnet das Programm?
Das Programm funktioniert auf kompletter String-Basis. Dies bedeutet, dass sämtliche Werte zuerst in einen Binär-String umgewandelt werden. Dieser Binärstring wird sodann character-Weise in einen Dezimal-, Hexadezimal- oder Oktal-String umgewandelt. So wird bei der Hexadezimal-Eingabe 5a7f
der Binärstring 0101101001111111
generiert, woraus dann beispielsweise der Oktal-Ausgabestring 055177
entsteht.
Das grösste Problem bei dieser Umrechnung sind die Dezimalzahlen: Die Richtung Dezimal-Binär ist noch relativ einfach durch einige einfache Additionen möglich, die Richtung Binär-Dezimal jedoch muss mittels eines Subtraktionsalgorithmus nachgebildet werden.
Da das Programm mit Strings funktioniert, ist es nicht weltklasse-performant, aber schnell genug.