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.
; AND OR XOR IMP EQV
; 0011 0011 0011 0011 0011
; 0101 0101 0101 0101 0101
; ---- ---- ---- ---- ----
; 0001 0111 0110 1101 1001
;~ Func Add($iO, $iT)
;~ Local $i, $bU, $iRet
;~ For $i = 0 To 63
;~ $iRet = BitSet($iRet, $i, )
;~ $bU =
;~ Next
;~ Return $iRet
;~ EndFunc
Func Xor($bO, $bT)
Return Not ($bO And $bT) And ($bO Or $bT)
EndFunc
Func Imp($bO, $bT)
Return Not $bO Or $bT
EndFunc
Func Eqv($bO, $bT)
Return Not Xor($bO, $bT)
EndFunc
Func Bit($iVal, $iBit)
Return BitAND($iVal, BitShift(1, $iBit * -1)) And True
EndFunc
Func BitSet($iVal, $iBit, $bSet)
If $bSet Then Return BitOR($iVal, BitShift(1, $iBit * -1))
Return BitAND($iVal, BitNOT(BitShift(1, $iBit * -1)))
EndFunc
Func BitIMP($iO, $iT)
Local $i, $iRet
For $i = 0 To 63
$iRet = BitSet($iRet, $i, Imp(Bit($iO, $i), Bit($iT, $i)))
Next
Return $iRet
EndFunc
Func BitEQV($iO, $iT)
Local $i, $iRet
For $i = 0 To 63
$iRet = BitSet($iRet, $i, Eqv(Bit($iO, $i), Bit($iT, $i)))
Next
Return $iRet
EndFunc
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).
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.