okay, also noch eine beschreibung dazu. das umrechnen von dezimalzahlen ins binärsystem funktioniert folgendermassen:
du hast z.b. die ausgangszahl 20 (i := 20). damit fängst du an, und solange du nicht den wert 0 rausbekommst, teilst du die zahl durch 2 und machst mit dem ergebnis weiter:
Code:
20:2 = 10 (kein rest -> 0)
10:2 = 5 (kein rest -> 0)
5:2 = 2,5 (rest -> 1)
2:2 = 1 (kein rest -> 0)
1:2 = 0 (rest -> 1)
wenn beim ergebnis der division ein rest übrigbleibt, kommt an die stelle eine 1, ansonsten eine 0. nachkommastellen werden ignoriert, weil wir nur mit ganzen zahlen arbeiten.
dann kommt da also 0, 0, 1, 0, 1 raus - das musst du dann noch umdrehen, und schon kommt da 10100 raus.
mit mod (modulodivision) prüfst du nur, ob bei einer division durch 2 ein rest bleibt, oder nicht.
das zurückrechnen sieht folgendermassen aus:
10100 -> (1 * 2^4) + (0 * 2^3) + (1 * 2^2) + (0 * 2^1) + (0 * 2^0) -> (1 * 16) + (0 * 8) + (1 * 4) + (0 * 2) + (0 * 1) -> 16 + 4 = 20.
und damit das ganze dynamisch wird, läuft das alles über eine schleife. mit bitweisem schieben lässt sich das auch lösen, denn wenn man einen binärwert um eine stelle nach rechts verschiebt (shr = shift right), halbiert sich der wert:
1000 = 8
0100 = 4
0010 = 2
0001 = 1
bei verschiebungen nach links (shl = shift left) verdoppelt sich der wert natürlich dementsprechend. wenn du noch fragen dazu hast - immer her damit.
