Addition mit logischen Operatoren (von Make-Grafik)

  • Hallo Community!
    Ich beschäftige mich derzeitig wieder mit logischen Operatoren. Den theoretischen Teil habe ich hinter mir, aber mich würde nun einmal wirklich interessieren, wie ich dies praktisch umsetzen kann. Dazu habe ich mir einmal angesehen, wie der PC intern addiert, subtrahiert, multipliziert und dividiert. Bis auf die Division habe ich soweit alles verstanden und möchte dieses Verfahren nur mit den Bit-Befehlen und den logischen Operatoren nachprogrammieren. Allerdings hänge ich nun bei einem logischen Problem bei der Addition. Ich schaffe es einfach nicht, die Bits mithilfe der logischen Operatoren so auszuwerten, dass einmal der Überlauf in einer Variable gespeichert wird und auch das Ergebnis an der entsprechenden Stelle selber. Als Hilfe (um auf Bit Ebene besser arbeiten zu können) habe ich mir einige Funktionen dazu geschrieben.



    Mit Hilfe dieser Funktionen (Welche selber die logischen Operatoren und auch Bit-Befehle verwenden) möchte ich nun eine Addition zweier Zahlen erreichen. Insgesamt gibt es dort 8 mögliche Kombinationen. Nun geht es darum das Ergebnis heraus zu bekommen und den Überlauf (als + markiert).


    Code
    Zahl 1   -> 00001111
    Zahl 2   -> 00110011
    Überlauf -> 01010101
    --------------------
    Ergebnis -> 01101001
             ->    + +++


    Wie man hoffentlich erkennen kann, habe ich den Überlauf in meinen Überlegungen mit einbezogen.


    Hat jemand vielleicht einen Denkansatz wie ich nun dieses Problem bewältigen kann?
    Nochmal zur Erinnerung: Ich möchte eine Addition nur mit Hilfe von den logischen Operatoren und auch den Bit-Befehlen erreichen.




    LG. Make :)


    Anmerkung von James: Make hat momentan anscheinend ein paar Probleme mit dem Forum, also erstelle ich den Thread für ihn.

    AutoIt Version (Prod): 3.3.14.2

    AutoIt Version (Beta): 3.3.9.5

    ausgewählte Skripte: Chatbot, komplexe Zahlen (UDF)

    Einmal editiert, zuletzt von James ()

  • Hier mal meine Lösung. Ich habe zwar nicht deine Funktionen verwendet, hoffe aber, dass es trotzdem verständlich ist. Negative Zahlen als Ergebnis sind noch ein Problem, ansonsten funktioniert es.


    Func _Add($A, $B)
    Local $C = 0, $i, $bitA, $bitB, $result, $carry = 0
    For $i = 0 To 30
    ; Bit an Position $i
    $bitA = Int(BitAND($A, 2^$i) <> 0)
    $bitB = Int(BitAND($B, 2^$i) <> 0)
    ; Berechnung
    $result = BitXOR($bitA, $bitB, $carry)
    $carry = BitOR(BitAND($bitA, $bitB), BitAND($bitA, $carry), BitAND($bitB, $carry))
    ; Ergebnis speichern
    $C = BitOR($C, $result * 2^$i)
    Next
    Return $C
    EndFunc


    MfG James

    AutoIt Version (Prod): 3.3.14.2

    AutoIt Version (Beta): 3.3.9.5

    ausgewählte Skripte: Chatbot, komplexe Zahlen (UDF)

    Einmal editiert, zuletzt von James ()