Home > Artikel > Ausgabe 3/2017 > Mit Binärzahlen arbeiten

Mit Binärzahlen arbeiten

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

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

Die Aufrufe sehen wie folgt aus:

Bin2Dec("11111111")

255

Bin2Dec("100000000")

256

Da wir einen Variant als Eingangsparameter nutzen, können Sie die Binärzahl auch als Zahl übergeben:

Bin2Dec(11111111)

255

Bin2Dec(100000000)

256

Mit diesen beiden Funktionen können Sie nun von Binär nach Dezimal und umgekehrt konvertieren.

Mit Binärzahlen rechnen

Wenn Sie mit Binärzahlen rechnen, gelingt dies in schriftlicher Form genau wie bei den Dezimalzahlen – nur dass die Anzahl der Ziffern je Stelle auf zwei begrenzt ist. 1 plus 1 ergibt nicht 2, sondern 10. 10 plus 1 ergibt 11. 11 plus 1 ergibt 100 und so weiter. Die Addition oder auch die übrigen Rechenoperationen wie Subtraktion, Multiplikation oder Division sollen uns in diese Artikel nicht weiter interessieren. Viel spannender sind zwei Operationen, die sich logische Konjunktion und logische Disjunktion nennen. Die logische Konjunktion (And) liefert ein Ergebnis, bei dem zwei Binärzahlen stellenweise verglichen werden. Das Ergebnis für jede Stelle ist das Ergebnis eines Und-Vergleichs. Das Ergebnis der logischen Disjunktion (Or) entspricht dem Ergebnis eines stellenweisen Oder-Vergleichs.

Schauen wir uns ein Beispiel für einstellige Binärzahlen an, zunächst für die logische Disjunktion:

0 Or 0 = 0

0 Or 1 = 1

1 Or 0 = 1

1 Or 1 = 1

Für die logische Konjunktion folgen diese Ergebnisse:

0 And 0 = 0

0 And 1 = 0

1 And 0 = 0

1 And 1 = 1

Welche Stellen kommen vor?

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!