Prüfen ob Konstantensammlung eine bestimte Konstante enthält

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Prüfen ob Konstantensammlung eine bestimte Konstante enthält

Beitrag von Tommy »

Hallo
Ich kan mit | mehrere Konstanten kombinieren aber wie prüfe ich ob
eine bestimmte drinne is? Ich habe drei Konstanten mit verschieden
Werte und alle drei werden an eine Prozedure übergeben.

Code: Alles auswählen

MeineProcedure(#Test_AAA|#Test_BBB|#Test_CCC)
Wie kan ich ermitteln ob #Test_AAA mit übergeben wurde? Ich habe
versucht mit & zu prüfen aber das scheint falsch zu sein.
Mein aktueller Code:

Code: Alles auswählen

#Test_AAA = 1
#Test_BBB = 2
#Test_CCC = 3

Debug #Test_AAA|#Test_BBB
Debug #Test_AAA|#Test_CCC
Debug #Test_BBB|#Test_CCC
Debug #Test_AAA|#Test_BBB|#Test_CCC

Debug ""

Debug (#Test_AAA|#Test_BBB|#Test_CCC) & #Test_AAA
Debug (#Test_AAA|#Test_BBB)           & #Test_AAA
Debug (#Test_AAA)                     & #Test_AAA
Debug (#Test_BBB|#Test_CCC)           & #Test_AAA
Debug (#Test_CCC)                     & #Test_AAA
Da sagt er überall "1". Wie kann ich herausfinden ob #Test_AAA über-
geben wurde? Ich hoffe ihr wisst was ich meine. :)
PB 5.41 x64
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von mhs »

Deine Konstanten müssen Binär aufsteigend sein, damit jedes Bit nur einmal gesetzt und überprüft werden kann. Also 1, 2, 4, 8, 16, 32, 64, ...

Code: Alles auswählen

#KONST_1 = 1
#KONST_2 = 2
#KONST_3 = 4
#KONST_4 = 8

Value.i = #KONST_1 | #KONST_3

Debug Value & #KONST_1
Debug Value & #KONST_2
Debug Value & #KONST_3
Debug Value & #KONST_4
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
GronkhLP
Beiträge: 72
Registriert: 14.11.2013 22:43
Wohnort: Köln
Kontaktdaten:

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von GronkhLP »

Müssen die Werte deiner Konstanten nicht eindeutg sein? Zum Beispiel so:

Code: Alles auswählen

#Test_AAA = 1
#Test_BBB = 2
#Test_CCC = 4
Ich bin mir nicht ganz sicher, ob das der richtige Weg ist, aber die Werte müssen m.E. in sochen Abständen sein. 1, 2, 4, 8, 16, 32, 64, ...
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von STARGÅTE »

Diese Methode geht nur, wenn die Bitmuster der Konstanten sich nicht überschneiden.
Mit andere Worten, du musst deine Konstanten wie Folgt aufsteigen lassen:
1, 2, 4, 8, 16, 32, 64, ...

Danach kannst du mit | die Konstanten verbinden und mit & dann wieder trennen:

Code: Alles auswählen

#Flag1 = 1
#Flag2 = 2
#Flag3 = 4
#Flag4 = 8

A = #Flag2 | #Flag3

Debug Bool(A & #Flag1)
Debug Bool(A & #Flag2)
Debug Bool(A & #Flag3)
Debug Bool(A & #Flag4)
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
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von Tommy »

Ahh an den Werten lags, super danke für die schnellen
Lösungen von euch :allright:
Nebenfrage: Gibt es bei Enumeration die Möglichkeit
binär hochzählen zu lassen? So was wie Enumeration 1 Step *2
PB 5.41 x64
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Pürfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von Tommy »

Super :allright:
Die Macro Varianten funktionieren alle gut. Wie geht es mit der Lösung
von WPö? Sind das nur Variablen oder wie wende ich das an?
PB 5.41 x64
GronkhLP
Beiträge: 72
Registriert: 14.11.2013 22:43
Wohnort: Köln
Kontaktdaten:

Re: Prüfen ob Konstantensammlung eine bestimte Konstante ent

Beitrag von GronkhLP »

Es sind nur Variablen, die er manuell deklariert, weil seine Projekte bisher nicht so groß waren, dass er Enumeration unbedingt brauchte.
Bild
Antworten