Hi,
ich hab mich mal an einen Dezimal- zu Binärzahlenrechner gesetzt ohne die entsprechenden Funktionen wie z.B. Binary / Dec zu verwenden.
Das Script arbeitet mit dem Horner-Schema, wer das nicht kennt der liest in dem Spoiler hier drunter weiter.
Stell dir die Zahl 15 vor, die wäre im Binärsystem 1111.
Die Binärrechnung möchte ich jetzt nicht erklären, weil es dazu viel bessere Beiträge gibt als ich schreiben kann
Also, man hat die Zahl 15. Die 15 teilt man durch 2 und erhält (wir nutzen die Ganzzahldivision - keine Dließkommazahldivision) den Rest 1.
Dann nimmt man das Ergebnis (7) und teilt es wieder durch 2 bis man bei 0 ist.
Ich werde Ganzzahldivision durch ein \ kennzeichnen.
15 \ 2 = 7 Rest 1.
7 \ 2 = 3 Rest 1.
3 \ 2 = 1 Rest 1.
1 \ 2 = 0 Rest 1.
Nun nehmen wir die Reste von unten nach oben und hängen sie an den anderen dran: 1111.
1111 und wie wir vorhin festgestellt haben ist 1111 in binär 15 in dezimal.
Da ich keine Funktion für eine Ganzzahldivision in AutoIt fand, oder ich bin einfach zu blind, hab ich es anders umformuliert.
Hoffentlich ist alles verständlich genug!
Hab die Stringfunctions jetzt mit Int ersetzt, läuft schneller und sauberer!
$iDecimal = InputBox("Dezimal", "Geben Sie eine ganzstellige Dezimalzahl ein:")
If $iDecimal <> Int($iDecimal) Then $iDecimal = Int($iDecimal)
$bNumber = _DecToBinary($iDecimal)
MsgBox(64, "Binär", "Die Dezimalzahl " & $iDecimal & " ist als binäre Zahl: " & $bNumber & ".")
Func _DecToBinary($iDecimal)
Local $bReturn, $bSign = False
If $iDecimal < 0 Then
$iDecimal *= -1
$bSign = True
EndIf
Do
$bReturn = Mod($iDecimal, 2) & $bReturn
If $iDecimal / 2 <> Int($iDecimal / 2) Then
$iDecimal = Int($iDecimal / 2)
Else
$iDecimal /= 2
EndIf
Until $iDecimal = 0
If $bSign = True Then $bReturn = "-" & $bReturn
Return $bReturn
EndFunc
Ich freu mich wenns euch gefällt, und ich freu mich wenns euch nicht gefällt und ihr mir Kritik da lässt, also haut in die Tasten!
Vielen Dank für euer Feedback!