Visual Basic World - Programmierung und BeispieleVisual Basic World - Tipps und TutorialsVisual Basic World - Source-Code und Forum

<leer>

Tipp 054: Umrechnung/Umwandlung Binär- bzw. Dualsystem zu Dezimal und vice versa

Autor: Alexander Kopatz   VB-Version: Visual Basic 6.0   Download: Beispielprojekt Tipp-054

Beschreibung

Das Binärsystem ist für die heutige Informatik von essentieller Bedeutung. Computer arbeiten mit Spannungen und Transistoren diese kennen im wesentliche zwei Zustände Spannung (HIGH oder 1) oder keine Spannung (LOW oder 0). Daher bildet das Dualsystem, also ein Stellenwertsystem zur Basis 2, die Grundlage nahezu jeder aktuellen Informationstechnologie.

Die heutigen hochentwickelten Programmiersprachen ersparen an vielen Stellen einen Rückgriff auf die binären Daten des Rechnersystems. In vielen Fällen ist es jedoch sehr hilfreich oder schlicht notwendig direkt mit den Binärwerten einer Datenfolge zu operieren. So werden bspw. sämtliche Ziffern und Buchstaben dieses Artikels auf der Festplatte oder im Arbeitsspeicher Binär hinterlegt.

Dual- bzw. Binärsystem

Das Dualsystem arbeitet anders als das im Alltag gebräuchliche Dezimalsystem nicht mit der Basis 10 sondern mit der Basis 2. Dies bedeutet für jeder Position (n) im Dualsystem lässt sich dessen Wertigkeit mit der Formel 2^n berechnen. Zur Veranschaulichung hier die Ziffern 0 bis 10, sowie 25, 50, 99 und 100 des Dezimalsystems in Binärschreibweise. Die Gesamtsumme der einzelnen Wertigkeiten entspricht dann dem jeweiligen Zahlenwert.

                 Dezimal        Binär
Position: 2 1 0 6 5 4 3 2 1 0
Wertigkeit: 100 10 1 64 32 16 8 4 2 1
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 2 0 0 0 0 0 1 0 3 0 0 0 0 0 1 1 4 0 0 0 0 1 0 0 5 0 0 0 0 1 0 1 6 0 0 0 0 1 1 0 7 0 0 0 0 1 1 1 8 0 0 0 1 0 0 0 9 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 0 2 5 0 0 1 1 0 0 1 5 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 0

Umrechnung Binär zu Dezimal

Die Umrechnung eines Binärwertes in eine Dezimalzahl ist ohne Weiteres möglich. Da zu jeder Position die Wertigkeiten bekannt sind müssen lediglich die Wertigkeiten jeder einzelnen Position addiert werden um so die Gesamtsumme im Zehnersystem zu erhalten. Für die Zahl 9 in Binärschreibweise (1001) ergibt sich bspw. folgende Umrechnung:

1 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3 = 9
        1 * 1 + 0 * 2 + 0 * 4 + 1 * 8 = 9 
                        1 + 0 + 0 + 8 = 9

In Programmcode ausgedrückt ließe sich diese Rechenoperation schematisch z.B. wie folgt lösen:

For Zähler = 0 To len(Binärzahl)
   Ergebnis = Ergebnis + Wert_an_Position_Zähler * (2 ^ Zähler)         
Next

Umrechnung Dezimal zu Binär

Die Umrechnung von der Dezimal- in die Binärschreibweise funktioniert ebenfalls Schrittweise. Der gesamte Zahlenwert wird durch 2 dividiert, ein ggf. überbleibender Rest wird entsprechend notiert, bleibt kein Rest so wird eine 0 notiert. Sodann wird der sich ergebendes Wert des Quotienten wieder durch zwei geteilt und der Rest notiert und so fort. Das Vorgehen sei hier anhand der Zahl 223 exemplarisch dargestellt:

223 : 2 = 111	Rest: 1
111 : 2 =  55	Rest: 1
 55 : 2 =  27	Rest: 1
 27 : 2 =  13	Rest: 1
 13 : 2 =   6	Rest: 1
  6 : 2 =   3	Rest: 0
  3 : 2 =   1	Rest: 1
  1 : 2 =   0	Rest: 1
Das Ergebnis lautet folglich: 11011111

Zur Umsetzung dieses Vorgangs in Software ist die Modulo Funktion sehr hilfreich, da Sie den Rest einer Division direkt zur Verfügung stellt. Hierdurch lässt sich eine Umwandlung mit wenigen Zeilen Code erreichen. Exemplarisch dargestellt ergibt sich folgende Funktion:

Do

   Ergebnis = DezimalZahl Mod 2 & Ergebnis
   DezimalZahl = DezimalZahl \ 2         

Loop Until dblDezimal < 1

Im Anschluss finden Sie zudem ein Beispiel, welches die Umwandlung binär zu dezimal und umgekehrt demonstriert und dabei auch einige unzulässige Eingaben ausfiltert.

Zusatzinformationen

» Tipp 056: Umrechnung/Umwandlung Hexadezimal zu Dezimal

Quellcode

frmKonverter
Form                     frmKonverter
Label                    lblBinär
Label                    lblDezimal
TextBox                  txtBinär
' VISUAL BASIC WORLD
' ===========================================
' Das große Portal zum Thema Visual Basic.
'
' Wenn Ihnen dieser Source Code gefallen hat,
' dann empfehlen Sie Visual Basic World bitte
' weiter und/oder setzen Sie einen Link auf:
'
' http://www.visualbasicworld.de/
'
' Vernetzen Sie sich mit uns:
'
' http://twitter.com/visualbasicwrld

Option Explicit Private bolUserEingabe As Boolean
Private Sub txtBinär_Change() If bolUserEingabe Then bolUserEingabe = False If Not txtBinär.Text = "" Then txtDezimal.Text = BinToDez(txtBinär.Text) Else txtDezimal.Text = BinToDez(0) End If End If End Sub
Private Sub txtBinär_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 46 Then bolUserEingabe = True End Sub
Private Sub txtBinär_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 127, 8, 48, 49 'ENTF-Taste 'Backspace-Taste '0 und 1 Case Else KeyAscii = 0 End Select bolUserEingabe = True End Sub
Private Sub txtDezimal_Change() If bolUserEingabe Then bolUserEingabe = False If Not txtDezimal.Text = "" Then txtBinär.Text = DezToBin(CDbl(txtDezimal.Text)) Else txtBinär.Text = DezToBin(0) End If End If End Sub
Private Sub txtDezimal_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 46 Then bolUserEingabe = True End Sub
Private Sub txtDezimal_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 127, 8 'ENTF-Taste 'Backspace-Taste Case Else If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 If Len(txtDezimal.Text) >= 9 Then KeyAscii = 0 'Zu große (der Einfachheit halber, hier lange) Zahlern 'werden ausgefiltert um einen Überlauf zu verhindern. End Select bolUserEingabe = True End Sub


modKonverter
' VISUAL BASIC WORLD
' ===========================================
' Das große Portal zum Thema Visual Basic.
'
' Wenn Ihnen dieser Source Code gefallen hat,
' dann empfehlen Sie Visual Basic World bitte
' weiter und/oder setzen Sie einen Link auf:
'
' http://www.visualbasicworld.de/
'
' Vernetzen Sie sich mit uns:
'
' http://twitter.com/visualbasicwrld

Option Explicit
Public Function DezToBin(ByVal dblDezimal As Double) As String '==================================================================' '= Fkt. wandelt eine Zahl aus dem Dezimal- in das Binärsystem um. =' '==================================================================' DezToBin = "" Do DezToBin = dblDezimal Mod 2 & DezToBin dblDezimal = dblDezimal \ 2 Loop Until dblDezimal < 1 End Function
Public Function BinToDez(ByVal strBinär As String) As Double '==================================================================' '= Fkt. wandelt eine Zahl aus dem Binär- in das Dezimalsystem um. =' '==================================================================' Dim lngZähler As Long Dim lngMax As Long lngMax = Len(strBinär) For lngZähler = 0 To (lngMax - 1) BinToDez = BinToDez + _ CDbl(Mid$(strBinär, lngMax - (lngZähler), 1)) * (2 ^ lngZähler) Next End Function

<leer> Aktuelle Seite Back To Top
Druckansicht | Feedback | Favoriten
Copyright © Visual Basic World, 2000-2022 | Kontakt | Impressum

Visual Basic World @ Twitter

Folgen Sie Visual Basic World!

Visual Basic World @ Twitter
Wenn Ihnen Visual Basic World gefällt, dann folgen Sie uns doch bei Twitter (@visualbasicwrld).
Vielen Dank!