Operator NOT

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Operator NOT

Beitrag 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.

Code: Alles auswählen

Define Test

Test = 0
Test = (Not Test)
Debug test
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Operator NOT

Beitrag 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.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Operator NOT

Beitrag von Josh »

funktioniert aber und ist auch praktisch, wenn ich einen merker (z.b. true/false) umkeheren will.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Operator NOT

Beitrag 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

PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Operator NOT

Beitrag 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
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Operator NOT

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Operator NOT

Beitrag 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)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Operator NOT

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Operator NOT

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Operator NOT

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten