Number System Conversions
Wenn wir Programme für Mikrocontroller schreiben, haben wir es normalerweise mit 3 verschiedenen Zahlensystemen zu tun: Dezimal, Binär und Hexadezimal (oder Hex). Wir verwenden das Dezimalsystem, weil es für uns selbstverständlich ist; das ist die Art, wie wir zählen. Leider ist das nicht die Art, wie Computer zählen. Da Computer und Mikrocontroller auf 1en und 0en beschränkt sind, zählen sie mit Folgen dieser Zahlen. Dies ist das binäre Zahlensystem. Binären Zahlen werden in der Regel die Zeichen „0b“ vorangestellt, die nicht Teil der Zahl sind. Manchmal werden sie auch in Gruppen von 4 Ziffern unterteilt, um sie leichter lesbar zu machen und den Bezug zum hexadezimalen Zahlensystem zu erleichtern. Ein Beispiel für eine Binärzahl ist 0b0100.1011. Die Punkte in der Zahl stehen für nichts, sie erleichtern nur das Lesen der Zahl.
Das Binärsystem ist einfach zu verstehen, aber man braucht viele Ziffern, um große Zahlen mit dem Binärsystem darzustellen. Mit dem Hexadezimalsystem können viel größere Zahlen mit weniger Zeichen dargestellt werden, und es ähnelt den Binärzahlen sehr. Hexadezimalen Zahlen werden in der Regel die Zeichen „0x“ vorangestellt, die nicht Teil der Zahl sind. Eine einzelne Hexadezimalziffer kann vier Binärziffern darstellen!
Binärzahlen können nur aus 1en und 0en bestehen; normalerweise besteht eine Binärzahl aus 8 Ziffern (oder einem Vielfachen von 8), wenn sie in einem Computer (oder Mikrocontroller) verwendet wird. Es ist nützlich zu wissen, wie man eine Binärzahl in eine Dezimalzahl umwandelt und umgekehrt. Wie konvertiert man also zwischen den Zahlensystemen? Betrachten wir zunächst, wie wir den Wert einer Dezimalzahl bestimmen. Die Zahl 268 lässt sich aufschlüsseln in 200 + 60 + 8 oder 2 * (10^2) + 6 * (10^1) + 8 * (10^0). Es gibt zwei wichtige Zahlen, die wir kennen müssen, um die Zahl zu „zerlegen“ – die Basis des Zahlensystems und die Position der Ziffer innerhalb der Zahl. Die Basis einer Dezimalzahl ist 10. Wenn wir die Zahl 268 umrechnen, ist 2 die zweite Ziffer, 6 die erste Ziffer und 8 die Null. Jede Ziffer muss entsprechend ihrer Position innerhalb der Zahl skaliert werden. Die Skalierung der Ziffer ist die Basis des Zahlensystems, erhöht um die Potenz der Position der Ziffer in der Zahl. Jede Zahl wird also skaliert, und dann werden alle skalierten Ziffern addiert, um den Gesamtwert der Zahl zu ermitteln.
Die gleiche Methode kann verwendet werden, um den Wert einer Binärzahl zu ermitteln. Betrachten wir zum Beispiel die Zahl 0b1011.0101. Die Basis des Binärsystems ist 2 (die Vorsilbe 0b wird oft im Code verwendet, um anzuzeigen, dass die Zahl im Binärformat vorliegt). Der Wert unserer Zahl ist: 1*(2^7)+0*(2^6)+1*(2^5)+1*(2^4)+0*(2^3)+1*(2^2)+0*(2^1)+1*(2^0), was gleich 181.
0b1011.0101 ist. Was für eine völlig ineffiziente Art, eine Zahl zu tippen! Aber wir können die gleiche Binärzahl mit nur 2 Hexadezimalziffern darstellen. Zunächst werden wir jedoch eine hexadezimale Zahl in eine dezimale Zahl umwandeln, so wie wir es bei einer binären Zahl getan haben. Wie wäre es mit 0xB5? Moment, was?! Das Präfix 0x wird im Code verwendet, um anzuzeigen, dass die Zahl in Hex geschrieben wird. Aber was macht das ‚B‘ da drin? Das Hexadezimalformat hat eine Basis von 16, was bedeutet, dass jede Ziffer bis zu 16 verschiedene Werte darstellen kann. Leider gehen uns nach der „9“ die numerischen Ziffern aus, so dass wir anfangen, Buchstaben zu verwenden. Der Buchstabe „A“ steht für 10, „B“ für 11, „C“ für 12, „D“ für 13, „E“ für 14 und „F“ für 15. F“ ist die größte Ziffer im Hexadezimalsystem. Wir konvertieren die Zahl auf dieselbe Weise wie zuvor. Der Wert von 0xB5 ist demnach: B*(16^1)+5*(16^0) oder 181.
Zu wissen, wie man Binär- und Hexadezimalzahlen in Dezimalzahlen umwandelt, ist wichtig, aber die nützlichste Zahlenkonvertierung ist wahrscheinlich die Konvertierung zwischen Hex und Binär. Diese beiden Zahlensysteme funktionieren eigentlich recht gut zusammen. Die Zahlensysteme sind zufällig so miteinander verwandt, dass eine einzelne Hex-Ziffer genau 4 Binärziffern entspricht, so dass 2 Hex-Ziffern 8 Bits (oder Binärziffern) darstellen können. Die folgende Tabelle zeigt, wie die einzelnen Hexadezimalziffern mit dem Binärsystem in Beziehung stehen:
Binärwert | Hexwert |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
zum Beispiel, Um die Hexadezimalzahl 0x1C in eine Binärzahl umzuwandeln, würden wir den entsprechenden Binärwert für 1 und C finden und sie kombinieren. So ist 0x1C in binärer Form 0b0001.1100. Wenn wir den Hexadezimalwert für eine Binärzahl herausfinden wollen, gehen wir einfach den umgekehrten Weg. Um die hexadezimale Darstellung der Binärzahl 0b0010.1011 zu finden, suchen wir zuerst den hexadezimalen Wert für 0010, dann den hexadezimalen Wert für 1011 und kombinieren sie; der hexadezimale Wert wäre 0x2B.
Es gibt viele kostenlose Tools, die bei der Konvertierung zwischen diesen Zahlensystemen helfen, googeln Sie einfach ‚hex number conversion‘. Wenn Sie Windows als Betriebssystem verwenden, steht Ihnen ein großartiges Tool zur Verfügung, das in den Taschenrechner integriert ist. Wechseln Sie einfach in den wissenschaftlichen Modus des Rechners und Sie können zwischen den Zahlensystemen konvertieren, indem Sie eine Zahl eingeben und dann das Format des Rechners ändern!