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); // => true
    

    Hoffe 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_HALLO

    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.

    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_HALLO

    Ein 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


Anmelden zum Antworten