(Co-Admin)
Registriert seit: 29. Mai 2002
Ort: Hamburg
11.119 Beiträge
Delphi 11 Alexandria
|
Re: Hilfe bei Schleife
15. Mär 2004, 16:55
Moin Kermit,
Inc(Dezimalzahl, StrToInt(dual[i]) * 1 shl (Length(dual) - i))
dual
ist ein String, der eine Dualzahl (Binärzahl) enthält, so wie in Deinem Editfeld.
i
ist ein Schleifenzähler, für eine Schleife, die alle Stellen des Strings dual durchgeht.
Dezimalzahl
muss vor der Schleife auf 0 initialisiert werden, und enthält am Ende den Wert, den die Dualzahl dargestellt hat.
StrToInt(dual[i])
ergibt, in Anghängigkeit es Wertes von dual[i] 0 oder 1, so dass auf der linken Seite von shl immer 0 oder 1 steht
length(dual) - i
sorgt dafür, dass die Anzahl der shl Vorgänge der Wertigkeit der jeweiligen Stelle entspricht.
Beispiel:
dual := '11001';
geht die Schleife jetzt von 1 bis 5, so ergibt sich beim ersten Durchlauf:
StrToInt(dual[i]) = 1. Das ganze *1 ist also 1
length(dual) - i = 5 - 1 = 4
also wird 1 viermal nach links geschoben. Jedes nach links schieben verdoppelt den Wert => 1 shl 4 = 16
Was dem Dezimalwert der höchsten Stelle der Dualzahl entpsricht.
Bei der nächsten Stelle wäre das Ergebnis dann also 8, dann zweimal hintereinander 0, und anschliessend 1, weil 1 shl 0 = 1
Ergibt
16
8
1
==
25
Was wiederum der Dezimalwert der Dualzahl 11001 ist. (1*2^4 + 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
|