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
Und nun raten Sie, wie Sie die beiden Routinen am einfachsten testen können … Genau! Sie lassen einfach das Ergebnis der einen Funktion für einen Wert durch die andere Funktion laufen und erhalten den Ausgangswert. Falls das stimmt, funktionieren die Routinen entweder – oder sie sind beide falsch programmiert …
Beispiel Meldungsfensterkonstanten
Was aber soll ich nun als Access-Entwickler mit diesem Wissen anfangen Genau genommen noch nicht viel. Aber schauen Sie sich doch einmal die MsgBox-Funktion an – genauer gesagt, ihre Parameter und die dafür zur Verfügung stehenden Konstanten.
Wenn Sie etwa ein Meldungsfenster anzeigen möchten, geben Sie mit dem ersten Parameter der MsgBox-Anweisung den Meldungstext, mit dem zweiten einige Konstanten wie zum Festlegen des anzuzeigenden Symbols, der Schaltflächen und der Standardschaltfläche und mit der dritten den Fenstertitel an. Interessant ist hier der zweite Parameter: Er setzt sich aus keiner, einer oder mehreren Konstanten zusammen. Diese Konstanten stehen stellvertretend für verschiedene Zahlenwerte und werden mit Or verknüpft, was “logische Disjunktion” heißt.
Logische Disjunktion
Die logische Disjunktion führt einen bitweisen Vergleich zweier numerischer Ausdrücke durch, also auch von Zahlen. Dies bedeutet im Detail, dass die Zahlen in Zweierpotenzen zerlegt, also eine Zahl im Dualsystem erzeugt und deren einzelne Stellen dann miteinander vergleicht.
1 or 2 ist dann gleichbedeutend mit 01 or 10 und ergibt 11, was aus den folgenden einfachen Regeln resultiert:
- 1 Or1= 1
- 1 Or 0 = 1
- 0 Or1= 1
- 0 Or 0 = 0
Durch die besondere Zuteilung der Werte der Konstanten für den zweiten Parameter der MsgBox-Funktion erhält man bei der Or-Verknüpfung dieser Werte eine Zahl, aus der man die jeweils verwendete Konstante wieder herauslesen kann. Für die anzuzeigenden Schaltflächen gibt es diese Möglichkeiten:
- vbOKOnly (0): Nur Schaltfläche OK (Voreinstellung)
- vbOKCancel (1): Schaltflächen OK und Abbrechen
- vbAbortRetryIgnore (2): Schaltflächen Abbruch, Wiederholen und Ignorieren
- …
Für die anzuzeigenden Symbole gibt es beispielsweise die folgenden Konstanten:
- vbCritical (16): Meldung für kritischen Fehler
- vbQuestion (32): Warnung mit Abfrage
- vbExclamation (48): Warnmeldung
- vbInformation (64): Informationsmeldung
Wir haben es also bei den Schaltflächen mit Vielfachen von1und bei den Symbolen mit Vielfachen von 16 zu tun.Dies setzt sich fort, wenn Sie die übrigen Konstanten betrachten – die Standardschaltfläche legen Sie mit Vielfachen von 256 fest und so weiter (wobei die übrigen Konstanten in der Praxis kaum zum Einsatz kommen).
Wenn der Entwickler nun die folgende MsgBox-Funktion absetzt, muss es ja für den Interpreter die Möglichkeit geben, die einzelnen Bestandteile zu erkennen:
MsgBox "Beispiel", vbOKCancel Or vbExclamation Or vbDefaultButton2
vbOKCancel hat den Wert 1, vbExclamation den Wert 48 und vbDefaultButton2 den Wert 256. Mit Or verknüpft ergibt dies: 1 Or 110000 Or 100000000 = 100110001, was wiederum 305 ergibt.
Und aus dieser Zahl, nämlich 305, soll der Interpreter nun herausfinden, ob dort die Zahl 0, 1, 2, 3, 4, 5 oder 6 für die anzuzeigenden Schaltflächen, die Zahl 0, 16, 32, 48 oder 64 für das Symbol und 0, 256, 512 oder 768 für die Standardschaltfläche enthalten ist.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo