Seite 1 von 2
Operator NOT
Verfasst: 30.10.2009 22:46
von Josh
kann mir bitte einer erklären, warum der nachfolgende code nur mit den klammern funktioniert? irgendwie ergibt das für mich keinen sinn.
Re: Operator NOT
Verfasst: 30.10.2009 22:57
von TomS
Obiger Code sollte imho gar nicht funktionieren. Auch nicht mit Klammern. Not 0 ist nicht 1, sondern alles außer 0. Deshalb kann Not nicht Teil einer Definition sein, sondern nur Teil eines Vergleichs.
Re: Operator NOT
Verfasst: 30.10.2009 23:39
von Josh
funktioniert aber und ist auch praktisch, wenn ich einen merker (z.b. true/false) umkeheren will.
Re: Operator NOT
Verfasst: 30.10.2009 23:48
von STARGÅTE
nein ist nicht praktisch, sondern zufall,
Ein NOT, AND OR , usw hat ich Termen (offiziell) nix zu suchen !
Nutze dafür bitte:
Code: Alles auswählen
Define Test
Test = 0
Test = 1-Test
Debug Test
Test = 1
Test = 1-Test
Debug Test
Re: Operator NOT
Verfasst: 31.10.2009 00:04
von edel
Josh hat geschrieben:funktioniert aber und ist auch praktisch, wenn ich einen merker (z.b. true/false) umkeheren will.
dafuer kannst du xor benutzen
Code: Alles auswählen
Define Test
Test = 0
Test ! #true
Debug test
Test ! #True
Debug test
Re: Operator NOT
Verfasst: 31.10.2009 04:21
von Thorium
Wieso sollte man NOT so nicht verwenden können?
Das ist ein ganz normaler Binär-Operator, der auch in der Hilfe als solcher beschrieben ist.
Wobei aber NOT 0 = -1 sein müsste. Da ja alle Bits umgekehrt werden.
Re: Operator NOT
Verfasst: 31.10.2009 15:38
von TomS
Hä? Wenn Not 0 = -1, dann ergibt doch folgende If-Abfrage False
Code: Alles auswählen
test = 123
If test = Not 0 ;If Test = -1
Debug "True"
Else
Debug "False"
Endif
Außerdem: Was heißt alle Bits werden umgekehrt? Dann ist das Ergebnis doch das Maximale für den jeweiligen Typ.
Für einen Typ, der aus 2 Bits besteht: XX
0=00
1=01
2=10
3=11 (Alle Bits wurden von 0 auf 1 gekippt -> Ergebnis ist 3)
Re: Operator NOT
Verfasst: 31.10.2009 16:10
von STARGÅTE
Thorium hat geschrieben:Wieso sollte man NOT so nicht verwenden können?
Das ist ein ganz normaler Binär-Operator, der auch in der Hilfe als solcher beschrieben ist.
Wobei aber NOT 0 = -1 sein müsste. Da ja alle Bits umgekehrt werden.
Du meinst das Binäre NOT : nämlich die ~
Dort ist ~0 = -1
Aber das Schlüsselwort NOT ist
kein binärOperator
Re: Operator NOT
Verfasst: 31.10.2009 17:13
von Josh
also jetzt mal ganz unabhängig von resultat, dass NOT liefern sollte:
wenn ich schreibe If 1 = 2, dann wird doch ein vergleich durchgeführt und der daraus resultierende boolean vom if ausgewertet.
wenn ich schreibe If NOT 1 = 2, dann wird der daraus resultierende boolean vor der auswertung noch umgekehrt.
wenn ich schreibe Debug Not 1, dann funktioniert das problemlos
in der hilfe steht "Das Resultat dieses Operators". also wenn ein resultat geliefert wird, dann sollte ich das auch einer variablen zuweisen können und zwar ohne diese komische klammer.
Re: Operator NOT
Verfasst: 31.10.2009 17:31
von STARGÅTE
PureBaisc ist nicht dafür gedach AussagenLogik in einer Variable zu speichern.
Wenn das so wären (was vllt bei NOT geht) dann muss auch sowas gehen:
statt so:
Code: Alles auswählen
A = 1
B = 2
If A = B
Debug "WAHR"
Else
Debug "FALSCH"
EndIf
kann ich die Aussage A = B auch als Variable speichern:
Code: Alles auswählen
A = 1
B = 2
C = (A=B)
If C
Debug "WAHR, weil c="+Str(C)
Else
Debug "FALSCH"
EndIf
Aber das versteht PB nicht, für PB wird (A=B) nicht als Aussage aufgewerte, sonden einfach C = A gesetzt.
Damit ist C = 2 und nicht FALSE wie in der aussagenlogik.
Deswegen Aussagen immer mit IF auswerten und dann daraufhin eine Variable setzen:
Code: Alles auswählen
A = 1
B = 2
If A = B : C = #True : Else : C = #False : EndIf
If C
Debug "WAHR"
Else
Debug "FALSCH"
EndIf
Wenn dir das immer zu "nervig" ist schreib n Macro:
Code: Alles auswählen
Macro Wahrheitswert(Aussage, Wert)
If Aussage : Wert = #True : Else : Wert = #False : EndIf
EndMacro
Dann ist C mit sicherheit 1 oder 0
Code: Alles auswählen
Macro Wahrheitswert(Aussage, Wert)
If Aussage : Wert = #True : Else : Wert = #False : EndIf
EndMacro
A = 1
B = 1
Wahrheitswert(A=B, C)
Debug C