Dezimalsystem -> Dualsystem

Hallo,
Habe folgenden Code, welcher den Wert der Variable „i“ aus dem Dezimalsystem ins Dualsystem „übersetzt“:

Dim x As Integer
Dim a(100) As Integer
Dim i As Integer
Dim Zahl As Long
Dim Name As Long

 y = i - 1
 Do Until y = 1
 e = 0
 For j = 1 To y
 If y / j = 2 Then e = 1
 Next j
 If e = 1 Then
 y = y / 2
 a(x) = 0
 Else
 y = (y - 1) / 2
 a(x) = 1
 End If
 Cells(x + 19, 3) = a(x)
 x = x + 1
 Loop

 Name = "1"

 For b = 1 To (x - 1)
 Name = Name & a(x)
 Next
 Cells(i, 2) = Name
 TBErgebnis.Text = TBErgebnis.Text & " " & Cells(i, 2)

Allerdings spuckt er mir bei i=65 bis 67 immer 1000000 aus. Bei 65 ist dies natürlich auch noch richtig, aber danach nicht mehr. 1 und 2 macht er auch noch richtig, aber danach macht er nochmal 10 und danach 100, was dann ja wieder richtig ist. Ich schätze es hat was mit dem Index zu tun, habe mit diesem noch nicht so viel gemacht, weshalb ich mir sicher bin, dort was falsch gemacht zu haben.

Vll. könnt ihr mir ja helfen. Durch Debuggen habe ich es nicht hinbekommen ;(

Oder gibts vll. nen einfach Befehl der das macht?
Sowas wie:

y Dezi into Dual = i

Oder sowas… Habe leider so noch keinen Befehl gefunden…

In Hoffnung mir helfen zu können…

Gruß

GURKE

Hallo!
Dein Code sieht mir gar furchtbar kompliziert aus.
Du kannst die Dualdarstellung einer Dezimalzahl recht leicht folgendermaßen berechnen:
Du beginnst mit einem leeren String.
Für die gegebene Zahl siehst Du einfach nach, ob sie durch 2 teilbar ist (modulo-Operator).
Das Ergebnis der modulo-Berechnung fügst Du am Anfang des Strings ein.
Dann teilst Du die Zahl (ganzzahlig) durch 2 und machst mit dieser wieder die modulo-Überprüfung.
Dies machst Du so lange, bis bei der Division 0 rauskommt. Dann hast Du im String die Dualdarstellung Deiner Dezimalzahl.

Auf die gleiche Weise kannst Du nach dieser Methode auch die Darstellung in anderen Zahlensystemen errechnen. Bspw. für die Oktal-Darstellung musst Du halt jeweils mod(8) rechnen und durch 8 teilen.

Gruß,
Martin

Hi,

mit Mathematik geht es leichter.

Im Binärsystem bedeutet die rechte Stelle, ob das rechte Bit besetzt ist oder nicht. Dieses Bit steht für 2^0, das links daneben für 2^1 … 2^2, 2^3 …

Das geht doch dann prima in einer Schleife.

Man muss nur prüfen, ob das entsprechende Bit Null oder 1 ist und das dann schreiben. Der Befehl für diese Prüfung lautet ‚And‘.

Ich tipp’s jetzt nicht, das ist ja schon fertig. :smile:

http://www.activevb.de/tipps/vb6tipps/tipp0230.html

Gruß Rainer

Moin,

Hallo!
Dein Code sieht mir gar furchtbar kompliziert aus.

Jop, allerdings, wenn man beachtet was ich eigentlich nur will xD

Du kannst die Dualdarstellung einer Dezimalzahl recht leicht
folgendermaßen berechnen:

Habe ich jetzt so umgesetzt:

Dim Name as String
Name = ""
a = i - 1
Do Until a = 1
 If a Mod 2 = 0 Then
 a = a / 2
 Name = "0" & Name
 Else
 a = (a - 1) / 2
 Name = "1" & Name
 End If
Loop

Funktioniert bis jetzt einwandfrei :wink:

Danke!

Gruß

GURKE

Moin,

Hi,

mit Mathematik geht es leichter.

So ähnlich sieht meine Version auch aus, die ich postete während du schriebst :wink:

Trotzdem danke, für deine Bemühung!

Gruß

GURKE