Bit Fiddle
Hilfe
Was tut dieses Programm?
- Konvertierung von beliebig grossen Integer-Zahlen im Dezimal-, Hexadezimal- und Binärsystem und in ASCII-Zeichen.
- Berechnung des Einer- und Zweierkomplements.
- Austausch der Bytes des Inputs, um zwischen Little- und Big-Endian zu konvertieren.
- Anzeige einer einfachen ASCII-Tabelle mit Zusatzinformation zu jedem Zeichen.
Bedienelemente des Hauptfensters
Das Hauptfenster existiert in zwei Varianten: Ein ausführliches Fenster und eine Mini-Version. Zwischen den beiden Versionen kann hin und her gewechselt werden, in dem der grüne Knopf in der Titelleiste gedrückt oder der entsprechende Befehl im Fenster-Menu ausgewählt wird.
Das Fenster ist unterteilt in die Eingabefelder oben, die Ausgabefelder in der Mitte und die Einstellungs-Auswahl unten.
Die Ein- und Ausgabefelder sind in einer Tabelle angeordnet, wobei in den Spalten die verschiedenen Basen angeordnet sind. In den Zeilen finden sich die Zahlen in verschiedenen Byte-Grössen wieder: 8, 16, 32, 64 und n Bytes. Bei n Bytes werden automatisch soviele Bytes benutzt, wie für eine Unsigned-Zahl benötigt werden.
Bei der Eingabe der Zahlen sind nur ganz bestimmte Ziffern erlaubt. Sämtliche abweichenden Ziffern werden ignoriert (auch das negativ-Zeichen, siehe weiter unten).
- Dec: Dezimalzahlen. Zahlen mit der Basis 10. Die natürlichen Zahlen, mit denen Menschen rechnen. Ziffern: 0123456789
- Hex: Hexadezimalzahlen. Zahlen mit der Basis 16, sehr häufig in Computerprogrammen anzutreffen. Ziffern: 0123456789abcdef sowie ABCDEF
- Bin: Binärzahlen. Jede Ziffer hat nur zwei Wertigkeiten: 0 und 1. Als Eingabe sind zusätzlich die Zeichen oO, iI und L erlaubt.
- Asc: ASCII-Zeichen. Die Zahlen werden als eine Aneinanderreihung von 8-Bit-Characters aufgefasst und als ASCII-7 mit führender 0 dargestellt. Sämtliche Zeichen des ASCII-Zeichensatzes sind verfügbar. Zahlen, welche keinem gültigen 7-Bit-ASCII-Zeichen entsprechen, werden als Fragezeichen ? dargestellt.
Im ausführlichen Fenster gibt es zudem Einstellungen, welche direkt im Fenster oder durch die entsprechenden Menu-Befehle gemacht werden können:
- Little ↔︎ Big: Austausch der Bytes des Inputs, um zwischen Little- und Big-Endian zu konvertieren. Vorsicht: Nur aktivieren, wenn man sich sicher ist, dass es das ist, was man will.
- Unsigned: Die Eingabe wird als Unsigned-Zahl angenommen und direkt in alle anderen Zahlen umkonvertiert.
- Einerkomplement: Die Eingabe wird als Unsigned-Zahl angenommen, mit dem Einerkomplement umgewandelt und so in alle anderen Zahlen umkonvertiert.
- Zweierkomplement: Die Eingabe wird als Unsigned-Zahl angenommen, mit dem Zweierkomplement umgewandelt und so in alle anderen Zahlen umkonvertiert.
- ASCII: Anzeige einer einfachen ASCII-Tabelle in einem separaten Fenster mit Zusatzinformation zu jedem Zeichen.
- Menu Einstellungen: Verschiedene Einstellungen betreffend der Anzeige und dem verstecken der verschiedenen Fenster.
Bedienelemente des ASCII-Fensters
Das Fenster ist unterteilt in die ASCII-Zeichen oben und die Darstellungs-Optionen unten.
Durch Darüberfahren mit der Maus werden zudem zu jedem ASCII-Zeichen im unteren Bereich zusätzliche Informationen eingeblendet.
- Escape / Code In Programmiersprachen mit der C-Syntax können manche ASCII-Zeichen nur mittels sogenannter Escape-Codes genutzt werden. Durch auswählen dieser Option werden diese anstelle der offiziellen ISO-Codes der ersten 32 Zeichen angezeigt.
- Hex / Dec: Hexadezimale oder Dezimale Nummerierung der Zeichen.
Einstellungen
Beim Start des Programmes:
- ASCII-Fenster verstecken: Das Fenster mit den ASCII-Angaben wird bei Programmstart versteckt.
- Einstellungen auf Standard zurücksetzen: Die Umrechnung wird bei Programmstart auf Unsigned gestellt ohne Endianness-Konvertierung.
Fenster im Vordergrund behalten:
- Ausführliches Fenster: Das ausführliche Fenster wird stets im Vordergrund behalten.
- Mini-Version: Die Mini-Version wird stets im Vordergrund behalten.
Wieso ist mein Zweierkomplement nicht negativ?
Es herrscht häufig Verwirrung darum, was genau ein Zweierkomplement ist. Viele denken, das in einem Computer das Zweierkomplement dasselbe ist wie eine negative Zahl. Das stimmt so aber nicht.
Wir Menschen rechnen im Dezimalsystem mit den Ziffern 0 bis 9. Um eine negative Zahl zu kennzeichnen haben wir ein zusätzliches Zeichen: Das Minus-Zeichen. Ein Computer jedoch rechnet nur mit den zwei Ziffern 0 und 1 und besitzt kein zusätzliches Zeichen für negative Zahlen. Somit muss eine Ganzzahl irgendwie speziell codiert werden, um sowohl positive, als auch negative Zahlen speichern zu können. Die heute gebräuchlichste Variante ist das Speichern von negativen Zahlen als das Zweierkomplement des Absolutwertes.
Das Zweierkomplement bezeichnet somit stets eine Umrechnung eines Absolutwertes, gespeichert als binärer Wert. Wie dass ein binärer Wert jedoch schlussendlich interpretiert werden soll, sprich als Vorzeichenbehaftet oder Vorzeichenlos, ist dem Wert per se nicht ansehbar. Für das Zweierkomplement ist dies jedoch irrelevant, es bezeichnet schlicht nur eine ganz bestimmte Umwandlung des binären Wertes.
Die vielem Möglichkeiten, einen binären Wert zu interpretieren, umzukonvertieren, zu Kürzen oder zu Erweitern und allgemein dem Benutzer darzustellen sind vielseitig und verwirrend. Wenn alle Möglichkeiten in das Programm eingebaut werden würden, würde das User Interface von Bit Fiddle sehr kompliziert werden. Der Entwickler hat sich entschieden, nur die wirklich notwendigsten Umkonvertierungen darzubieten. Hierbei konvertiert das Programm stets nach dem gleichen Schema:
Der genaue Ablauf der Konvertierung
- Zuerst wird die Eingabe (Dec, Hex, Bin oder Asc) in ein internes Format, bestehend aus einzelnen Bits umgewandelt. Hierbei werden tatsächlich nur die oben aufgeführten Ziffern beachtet, alles andere wird ignoriert. Eine negative Dezimalzahl wird somit stets als ihr Absolutbetrag aufgefasst. Die Anzahl Bits der internen Darstellung entspricht exakt der Anzahl Bits, welche für eine unsigned-Darstellung mittels des kleinsten möglichen Vielfachen von 8 Bits benötigt werden.
- Dann werden, falls die
Little ↔︎ Big
-Option aktiviert ist, die Bytes des internen Formates umgedreht. - Dann wird die Konvertierung angewendet, sprich
Unsigned
(Was nichts bewirkt),Einerkomplement
oderZweierkomplement
. - Danach werden die RESULTIERENDEN Bits in die verschiedenen Ausgabe-Grössen verpackt.
- Wenn die interne Darstellung mehr Platz als die Ausgabe benötigt, so werden die höchstwertigen Bits schlicht abgeschnitten. Beispielsweise entsteht so aus der internen Darstellung 0b00110011 10101010 die 8-Bit-Ausgabe 0b10101010. Dies entspricht dem Integer-Umwandlungs-Mechanismus vieler Programmiersprachen.
- Wenn die interne Darstellung weniger Platz als die Ausgabe benötigt, so werden die höchstwertigen Bits ARITHMETISCH erweitert. Dies bedeutet, dass die Zahl VORZEICHENBEHAFTET interpretiert wird. Beispielsweise entsteht so aus der internen Darstellung 0b10101010 die 16-Bit-Ausgabe 0b11111111 10101010. Dies wurde im Programm Bit Fiddle deswegen so gelöst, da die nicht-arithmetische Umwandlung (sprich, die Zahl wird mit Nullen aufgefüllt) trivial ist und somit ausgelassen werden kann. Es wird erwartet, dass ein Benutzer sofort erkennt, dass diese Umwandlung arithmetisch erfolgte.
- Dann werden die Ausgabe-Grossen in die verschiedenen Zahlenformate umgewandelt. Aus der internen Darstellung entstehen so wiederum Dezimalzahlen, Hexadezimalzahlen, Binärzahlen und ASCII-Strings.
- Dezimalziffern werden als 3er-Tupel bestehend aus den Dezimalziffern 0 bis 9 ausgegeben, mit jeweils einem Leerzeichen dazwischen. Im Falle der Umwandlung mittels des Einerkomplements wird keine Ausgabe für die Dezimalzahlen generiert. Falls (und wirklich nur falls) die Umwandlung mittels des Zweierkomplements erfolgte, wird der Wert als vorzeichenbehaftete Zahl ausgegeben.
- Hexadezimalzahlen werden als paarweise Hexadezimalziffern ausgegeben, mit jeweils einem Leerzeichen dazwischen. Die Buchstaben werden als Kleinbuchstaben ausgegeben.
- Binärzahlen werden als 8er-Tupel bestehend aus den Binärziffern 0 und 1 ausgegeben, mit jeweils einem Leerzeichen dazwischen.
- ASCII-Strings werden als reine 7-Bit-ASCII-Zeichen ausgegeben wobei das achte Bit auf 0 gesetzt wird. Einzelne Bytes, welche keinem gültigen ASCII-Zeichen entsprechen, werden als Fragezeichen ? dargestellt.
Diese Umwandlung deckt sämtliche nicht-trivialen Umwandlungen von Integer-Zahlen ab.
Da die Eingabe stets als Unsigned angenommen wird, ist es nicht möglich, eine vorzeichenbehaftete Zahl als Hex einzugeben und sie als vorzeichenbehaftete Dezimalzahl auszugeben. Für diejenigen, welche an der Interpretation einer Dezimalzahl als negative Ganzzahl interessiert sind, können jedoch einfach das Zweierkomplement einschalten und der resultierenden Dezimalzahl ein Minus vorne anhängen.