IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - VB: Binärzahl in Dezimalzahl umrechnen



VB: Binärzahl in Dezimalzahl umrechnen

Das Gegenstück zur Umrechnung von Dezimal in Binär.


Autor: Patrick Bucher (paedubucher)
Datum: 19-11-2004, 17:24:31
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 20223x
Rating: 8 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

Oft liegen Zahlen binär vor. Die Umrechnung ins dezimale Zahlensystem ist zwar einfach, dafür aber relativ zeitaufwändig. Man kann auch den Windows-Rechner benutzen, damit geht es bedeutend schneller.

Damit man aber diese Umrechnung in einem eigenen Programm verwenden kann, wird nun eine Funktion geschrieben.

Wie funktioniert die Umrechnung?

Die Basis eines Zahlensystems sagt aus, wie viele Zustände eine Stelle annehmen kann. Im binären System sind das natürlich 2. Bei der Umrechnung von Dezimalzahlen in Binärzahlen dividiert man durch die Basis - für die Umkehroperation multipliziert man logischerweise mit der Basis. Die Multiplikation mit der Basis reicht nicht aus, denn sie sagt nichts über den Stellenwert der Zahl aus. Man muss die Basis jeweils noch mit der Stellennummer potenzieren. Aus diesen Aussagen kann man folgende allgemeine Schreibweise der Berechnung ableiten:
Wert * Basis^Stellenwert
Der Stellenwert beginnt immer bei 0, bei jeder weiteren Stelle ist dieser um 1 höher. Mit einem Beispiel wird der Sachverhalt klarer:
11001
Man beginnt immer mit der Stelle ganz rechts und arbeitet sich Stelle für Stelle nach links durch.
1 * 2^0 = 1
0 * 2^1 = 0
0 * 2^2 = 0
1 * 2^3 = 8
1 * 2^4 = 16
Nun kann man die Resultate nur noch aufsummieren und man hat das Ergebnis.
1 + 8 + 16 = 25
Umsetzung

Funktionskopf

Nun folgt die Umsetzung in den Programmcode. Die Funktion benötigt nichts weiter als die binäre Zahl. Damit man aber auch größere binäre Zahlen an die Funktion übergeben kann, ist ein String besser geeignet.

Die Funktion soll später eine dezimale Zahl zurückgeben. Obwohl die Funktion nur ganze Zahlen bearbeiten kann, geben wir weder Int noch Long zurück, da diese beiden Datentypen zu klein sind. Stattdessen verwenden wir double und verschwenden dabei ein wenig Speicher.

Der Funktionskopf kann dann ungefähr so aussehen:

Public Function BinToDez(ByVal strBin As String) As Double
Variablen

Weiter geht es mit dem Deklarationsteil der Funktion, sie benötigt folgende Variablen:
  1. Dim bytBit As Byte
  2. Dim bytBas As Byte
  3. Dim intStrLen As Integer
  4. Dim dblZwischenres As Double
  5. Dim n As Integer
Erklärungen
  1. Nimmt später den Wert einer Stelle auf
  2. Variable für die Basis
  3. Steht später für die Länge des übergebenen Strings
  4. Das Zwischenresultat aus der Berechnung einer Stelle
  5. Ein Schleifenzähler
Initialisierung
  1. bytBas = 2
  2. intStrLen = Len(strBin)
Erklärungen
  1. Jede Stelle einer Binärzahl kann zwei Werte aufnehmen
  2. Die Len() Funktion liefert die Anzahl Stellen der Binärzahl
Alle anderen Zahlenvariablen haben den Ausgangswert 0.

Berechnung

Nun folgt die eigentliche Berechnung. Diese ist relativ komplex, obwohl sie nur wenige Zeilen Programmcode benötigt.
  1. For n = 0 To (intStrLen - 1) Step 1
  2. bytBit = Mid(strBin, intStrLen - n, 1)
  3. If bytBit <> 0 Then
  4. dblZwischenres = bytBit * (bytBas ^ n)
  5. BinToDez = BinToDez + dblZwischenres
  6. End If
  7. Next n
Erklärung

  1. Die Schleife läuft für jede Stelle einmal durch. Die Stellenwertigkeit, welche in der Berechnung als Exponent benötigt wird, ist am Anfang 0 und beim letzten Durchlauf um 1 kleiner als die Anzahl Stellen. Die Variable n eignet sich also perfekt als Exponent.
  2. Die Zählervariable n hat eine weitere nützliche Funktion. Es wird pro Durchlauf nur eine Stelle des Strings verwendet. Die gesamtlänge des Strings minus n ergibt immer die aktuelle Stelle innerhalb des Strings.
  3. Die Variable bytBit nimmt also die aktuelle Stelle auf, welche mithilfe der Mid() Funktion herausgefunden wird.
  4. Hier wird geprüft, ob die aktuelle Stelle nicht 0 beträgt.
  5. Falls die aktuelle Stelle nicht 0, (sondern 1) beträgt, kann der dezimale Wert der aktuellen Stelle berechnet werden.
  6. Ende des bedingten Blocks
  7. BinToDez ist der Funktionsname und damit auch der Rückgabewert. Die Variable summiert die Zwischenresultate auf, bis die Schleife durchgelaufen ist
  8. Das Ende der Schleife
Nun wird die Variable BinToDez automatisch zurückgegeben. Die Funktion muss nur noch beendet werden.

End Function


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04503
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16551
Queueeinträge:06236
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1136
Comments: 0