Binärzahlen – da arbeiten doch nur Computer mit, oder auch mit Hexadezimalzahlen! Das ist doch uninteressant für mich! Mitnichten: Einige Grundkenntnisse im Bereich des Umgangs mit Binärzahlen haben noch keinem geschadet. Schon gar nicht, wenn man mit Access arbeitet und mit VBA programmiert. Dort ergibt sich doch das eine oder andere Mal Gelegenheit, mit einfachen Funktionen größere Probleme zu lösen – oder die Rechenoperationen wie die logische Konjunktion oder Disjunktion einzusetzen. Dieser Artikel liefert die wichtigsten Grundlagen zu diesem Thema.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1703_Binaerzahlen.accdb.
Dezimalzahlen und Binärzahlen
Dezimalzahlen stammen aus dem Stellenwertsystem, mit dem wir täglich umgehen – dem Dezimalsystem. Die erste Stelle entspricht dem Einer, die zweite dem Zehner, die dritte dem Hunderter und so weiter. Dementsprechend gibt es für jede Stelle zehn verschiedene Ziffern von 0 bis 9. Anders sieht es beim Dualsystem oder Binärsystem aus. Hier gibt es nur zwei verschiedene Zahlen, nämlich 0 und 1. Die erste Stelle steht wie beim Dezimalsystem für den Einer, aber die zweite erfasst direkt die Zweier, die dritte die Vierer und so weiter. Die Zahl 5 im Dezimalsystem entspricht dann etwa der Zahl 101 im Binärsystem (ein Vierer, kein Zweier, ein Einer).
Konviertieren
Nun kommt es vor, dass Sie Zahlen im Binärsystem erhalten und diese gegebenenfalls in das Dezimalsytem umwandeln wollen oder umgekehrt. Dafür benötigen Sie kleine Funktionen, die Sie sich nicht selbst ausdenken müssen – wir stellen Sie ihnen in den folgenden Abschnitten vor.
Umrechnen von Dezimal zu Binär
Die Funktion zum Umrechnen von dezimalen Zahlen in binäre Zahlen heißt Dec2Bin. Sie erwartet einen Long-Wert und liefert einen String zurück:
Public Function Dec2Bin(lngDecimal As Long) As String Dim strBinaer As String Do While lngDecimal > 0 If lngDecimal Mod 2 = 1 Then strBinaer = "1" & strBinaer lngDecimal = lngDecimal - 1 lngDecimal = lngDecimal / 2 Else strBinaer = "0" & strBinaer lngDecimal = lngDecimal / 2 End If Loop Dec2Bin = strBinaer End Function
Sie können diese Funktion beispielsweise mit den folgenden Aufrufen im Direktbereich des VBA-Editors ausprobieren:
dec2bin(4096) 1000000000000 dec2bin(4095) 111111111111
Die Funktion prüft zunächst, ob die übergebene Zahl beim Teilen durch den Wert 2 einen Rest von 1 liefert. Ist dies der Fall, besetzt sie schon einmal die ganz rechte Stelle der Binärzahl mit dem Wert 1. Von der Zahl subtrahiert die Funktion dann den Wert 1, da wir die 1 ja schon in strBinaer abgebildet haben.
Außerdem teilen wir die Zahl durch den Wert 2, sodass wir im folgenden Durchlauf wieder prüfen können, ob die zweite Stelle der Binärzahl belegt werden kann. Dies ist im ersten Teil der If…Then-Bedingung der Fall, der zweite Teil kümmert sich darum, dass beim Teilen durch den Wert 2 kein Rest übrigbleibt. In diesem Fall wird der Wert 0 vorn an die Binärzahl in strBinaer angehängt. Auf diese Weise durchläuft die Funktion alle Zweierpotenzen, trägt entweder 1 oder 0 vorn in strBinaer ein und teilt die Zahl nochmals, nachdem gegebenenfalls der Wert 1 subtrahiert wurde.
Wenn Sie die Funktion einmal im Debugging-Modus für einfache Werte wie 1, 2 oder 3 durchlaufen, wird der Ablauf deutlicher.
Umrechnen von binär zu dezimal
Die folgende Funktion namens Bin2Dec wandelt eine als Variant übergebene Binärzahl in eine Dezimalzahl um:
Public Function Bin2Dec(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 Bin2Dec = lngDecimal End Function
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: