Bitkombination auf Bitflag prüfen
-
Tach zusammen,
Also wie kann ich eine bestimmtes Bitset auf ein bestimmtes Flag prüfen...hier noch ein Beispiel:
// Die Flags: #define FLAG_HALLO (0x0040L) #define FLAG_DU (0x0080L) #define FLAG_DA (0x0100L) #define FLAG_OBEN (0x0200L) unsigned long ulCombi = FLAG_HALLO | FLAG_DU | FLAG_OBEN; /* Jetzt will ich mittels einer Funktion prüfen, ob bspw. FLAG_DA oder FLAG_OBEN in ulCombi enthalten ist ...*/Pseudocode:
IsFlagIncluded(ulCombi, FLAG_DA); // => false IsFlagIncluded(ulCombi, FLAG_OBEN); // => trueHoffe es ist klar was ich meine...VIELEN DANK für Hilfe...

-
Hi!
Sowas in der Art:
inline bool IsFlagIncluded( unsigned long bitset, unsigned long flag ) { return bitset & flag; }Du solltest aber, für jeden Status, nur ein Bit setzen. Also nimmst du dezimale Zahlen wie 1, 2, 4, 8, ...
grüße
-
Wobei noch anzumerken wäre, dass du bei einem - für Flags eher untypischen - float wirklich verdammt viele Flags hast. Selbst wenn du nur Flags der Form 2^n wählst.
Ich würde lieber einen int Typen wählen. Kann ja ein genauso großer sein.
-
Float??
Wo denn?? 
@Topic:
Es ist übrigens schöner statt define den "enum-hack" auszunutzen:enum { FLAG_HALLO 0x0001, FLAG_DU 0x0002, FLAG_DA 0x0004, FLAG_OBEN 0x0008 };grüße
-
@Topic:
Es ist übrigens schöner statt define den "enum-hack" auszunutzen:wieso hack ? ...und besser doch nur weils übersichtlicher ist oder ?
...danke

-
Gibts auch ne Möglichkeit ein Flag zu extrahieren, wenn es enthalten ist .. ?
wann ja wie
....also sowat wie...:
ExtractFlag(ulCombi, FLAG_HALLO) // => ulCombi ohne das Flag FLAG_HALLOdann noch ne Frage:
Wieso folgerst du das:Also nimmst du dezimale Zahlen wie 1, 2, 4, 8, ...
aus dem
Du solltest aber, für jeden Status, nur ein Bit setzen.
vielen dank nochmal!!!!!!! echt lieb von euch

-
Hi!
wieso hack ? ...und besser doch nur weils übersichtlicher ist oder ?
Es heist halt nunmal "Hack". Ich habs ja extra in Anführungszeichen geschrieben.
Gibts auch ne Möglichkeit ein Flag zu extrahieren, wenn es enthalten ist .. ?
wann ja wie
....also sowat wie...:
ExtractFlag(ulCombi, FLAG_HALLO) // => ulCombi ohne das Flag FLAG_HALLOEin Bit auf 0 setzen kannst du mit bitset &= ~maske.
dann noch ne Frage:
Wieso folgerst du das:Also nimmst du dezimale Zahlen wie 1, 2, 4, 8, ...
aus dem
Du solltest aber, für jeden Status, nur ein Bit setzen.
Schau dir die Binärdarstellung der Zahlen an:
0001 = 1 0010 = 2 0100 = 4 1000 = 8
-
Float??
Wo denn?? 
Ich sach ma... voll krass!
- Ich hab float gesehen. Aber das stand da nie!Aber hey, als "Hack" würde ich das noch nich bezeichnen. Schon gar nicht wenn du jeden Wert einzeln definierst

-
ne hack...LOL^^ ...das mit dem Float hat sich dann auch geklärt bleiben noch meine beiden Posts unbeantwortet...

danke^^
-
Hi!
Es wird eher liebevoll als "Hack" bezeichnet. Ich habs ja nich erfunden... Deine Posts hab ich übrigens drei Posts über diesem beantwortet.
grüße