Binärzahlen – was soll ich denn damit Ich will Access-Anwendungen erstellen, dazu brauche ich doch keine Binärzahlen! Oder vielleicht doch Oh ja, es gibt sie sehr wohl, die Anwendungszwecke für Binärzahlen, und wenn Sie dort mit allen Wassern gewaschen sind, können Sie sich meist eine Menge Arbeit sparen. Lesen Sie doch einfach selbst, warum Binärzahlen für den Access-Entwickler interessant sind und was Sie dazu wissen sollten …
Einem Programmierer sind Begriffe wie Dualsystem (nicht zu verwechseln mit “Duales System” …) oder Binärzahlen natürlich nicht unbekannt. Beim Dualsystem handelt es sich wie beim Dezimalsystem oder Hexadezimalsystem und Stellenwertsysteme, mit denen man mit einer endlichen Menge verschiedener Zahlen beziehungsweise Zeichen unendlich große Zahlen darstellen kann. Hier zu Lande ist das Dezimalsystem gebräuchlich, zumindest bei Menschen. Computer machen es sich ein wenig einfacher und verwenden nur zwei statt zehn verschiedener Zeichen zur Darstellung von Zahlen – dafür können Sie damit aber viel schneller rechnen.
Kurz zusammengefasst hier das Wichtigste zum Dualsystem: Wie beim Dezimalsystem bestehen Zahlen auch im Dualsystem aus einem oder mehreren Zeichen, deren Stellenwert von rechts nach links steigt – beim Dualsystem entspricht der Wert einer jeden Ziffer allerdings nicht der Zehnerpotenz, sondern der Zweierpotenz der jeweiligen Stelle. Während die Zahl 101 im Dezimalsystem einem Einer (1×100), keinem Zehner (0x101) und einem Hunderter (1×102) entspricht, sieht die Zahl 101 im Dualsystem zwar genauso aus, hat aber – umgerechnet in das Dezimalsystem – einen ganz anderen Wert, nämlich 1×22 + 0x21 + 1×20 = 5.
Wer sich mal umschaut, wird feststellen, dass es in der Computerwelt von Zweierpotenzen (also 20, 21, 22, 23, 24, 25 …) nur so wimmelt – die lauten im Dezimalsystem nämlich so: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1.024, 2.048, 4.096, 8.192, 16.384, 32.768, 65.536 … Und ein Kilobyte sind auch gar nicht 1.000 Byte, sondern 1.024 Byte, und ein Gigabyte nicht 1.000.000 Byte, sondern 1.048.576 Byte.
Ja und nein
Ein einfacher Anwendungsfall für Binärzahlen ist das übertragen von Informationen in der einfachstmöglichen Form. Stellen Sie sich einmal vor, Sie wollten das Ergebnis einer Umfrage, die nur Fragen mit den Antworten Ja und Nein enthält, von einem Ort, sagen wir einem Webserver, zu einem anderen Ort – Ihrem eigenen Rechner – transportieren und dann auswerten.
Sie könnten dann festlegen, dass die Antwort auf die erste Frage in der ersten Stelle einer Dualzahl Platz findet, die zweite in der zweiten und so weiter. Sie können das Ergebnis – sagen wir 1010101 – in eine Binärzahl wie 85 umwandeln und anschließend die Ergebnisse der Umfrage daraus extrahieren. Das Umwandeln von binär nach dezimal geht recht einfach mit der kleinen Routine aus Listing 1.
Listing 1: Die Funktion BinaerToDecimal rechnet binäre Zahlen in dezimale Zahlen um.
Public Function BinaerToDecimal(varBinaer As Variant) As Long Dim lngDecimal As Long Dim intPos As Integer Dim bytVal As Byte Dim i As Integer For i = Len(varBinaer) To 1 Step -1 bytVal = Mid(varBinaer, i, 1) lngDecimal = lngDecimal + bytVal * 2 ^ intPos intPos = intPos + 1 Next i BinaerToDecimal = lngDecimal End Function
Die Herleitung einer solchen Funktion ist einfach – Sie brauchen ja nur die Stellen der Zahl von hinten nach vorne zu durchlaufen und mit der der Stelle entsprechenden Zweierpotenz zu multiplizieren.
Etwas komplizierter ist die Umwandlung einer Dezimalzahl in eine Binärzahl – zumindest, wenn man die richtige Methode nicht kennt. Und deren Name lautet beispielsweise Modulo-Methode.
Möglicherweise klingelt es bei Ihnen … Modulo Genau: VBA stellt die Mod-Funktion bereit, die den Rest einer ganzzahligen Division zweier Zahlen zurückliefert. Und die Modulo-Methode zur Ermittlung von Dualzahlen aus Dezimalzahlen sieht ganz einfach so aus: Sie teilen die Dezimalzahl durch 2 und erhalten entweder1oder 0 als Rest – und das ist auch schon die erste (die rechte) Stelle der gesuchten Dualzahl.
Das Ergebnis bearbeiten Sie auf die gleiche Weise, bis die Differenz aus der ursprünglichen Zahl und der Summe aus dem Modulo und dem Quotient aus der ursprünglichen Zahl und 2 den Wert 0 ergibt.
In VBA gesprochen sieht das so wie in Listing 2 aus.
Listing 2: Die Funktion DecimalToBinaer rechnet dezimale Zahlen in binäre Zahlen um.
Public Function DecimalToBinaer(lngDecimal As Long) As String Dim strBinaer As String Do While lngDecimal > 0 If lngDecimal Mod 2 = 1 Then strBinaer = strBinaer & "1" Else strBinaer = strBinaer & "0" End If lngDecimal = lngDecimal - lngDecimal / 2 - lngDecimal Mod 2 Loop DecimalToBinaer = StrReverse(strBinaer) End Function