Bitwise Vergleiche?
-
Hi.
Folgendes Beispiel:enum Bits { Eins = 1 << 0, Zwei = 1 << 1, Drei = 1 << 2, Vier = 1 << 3, Funf = 1 << 4 } // ... Bits Input = Eins | Zwei | Vier; Bits Check1 = Eins | Drei | Funf; Bits Check2 = Drei | Funf; Bits Check3 = Eins | Zwei;
Gibt es eine Möglichkeit, bequem zu vergleichen, ob
Input
valid zu jeweilsCheck1
,Check2
undCheck3
ist? Ich möchte mir mühseligesInput & Eins
usw. ersparen. Geht das?Rauskommen sollte:
Check1
passt,
Check2
passt nicht,
Check3
passtGruß
-
Es kommt drauf an wie du vergleichen willst. Wenn du prüfen willst ob Input genau einem der Check Variablen entspricht, dann kannst du einfach mit == arbeiten.
Wenn du prüfen willst ob in Input alle Flags eines bestimmten Checks gespeichert sind dann wirst du wohl folgendes benutzen müssen:if ((Input & Eins) && (Input & Drei) && (Input & Fuenf)) { // Check1 passt }
-
Einfach mit Check1 verunden, und wenn genau Check1 übrig bleibt, passt es.
int Input = Eins | Drei | Vier | Funf; int Check1 = Eins | Drei | Funf; int Check2 = Drei | Funf; int Check3 = Eins | Zwei; if((Input&Check1)==Check1) { printf("Yeah!"); }else { printf("Nooo..."); }
-
Hab mir schon gedacht das es da noch irgendeinen Byte-Hack gibt.
-
Also, es geht um folgendes: Der User kann eine Flagliste erstellen, in der er definiert, in welchen Fällen die Aktion X ausgeführt werden soll (Beispiel:
Flaglist = Eins | Zwei | Vier
). Dann soll anhand verschiedener Parameter in der Funktion eine weitere Checklist erstellt werden, welche dann alle Fälle beinhaltet, die zutreffen (Beispiel:Checklist = Eins | Vier
).Das heißt, die Abfrage soll gültig sein, sobald einer der Bits in der
Checklist
mit derFlaglist
übereinstimmt.Gruß
-
Es muss einfach nur ein Bit übereinstimmen? Dann kannst du doch einfach verunden, und wenn da noch ein Bit übrig bleibt (übereinstimmt), ist es true:
int Input = Eins | Drei | Vier | Funf; int Check1 = Eins | Drei | Funf; int Check2 = Drei | Funf; int Check3 = Eins | Zwei; if(Input&Check1) { printf("Yeah!"); }else { printf("Nooo..."); }
-
Cool. Doch so einfach
Dankeschön an alle!Gruß