定义标志位

#include <iostream>
// 定义标志位 
#define FLAG_A (1 << 0)  // 0000  0001 
#define FLAG_B (1 << 1)  // 0000  0010 
#define FLAG_C (1 << 2)  // 0000  0100 
#define FLAG_D (1 << 3)  // 0000  1000 
#define FLAG_E (1 << 4)  // 0001  0000 
#define FLAG_F (1 << 5)  // 0010  0000 
#define FLAG_G (1 << 6)  // 0100  0000 

struct  BitFlags{
private:
    int flags;

public:
    BitFlags() : flags(0) {}

    void set(int flag) { flags |= flag; }
    void clear(int flag) { flags &= ~flag; }
    bool isSet(int flag) const { return (flags & flag) != 0; }
    void toggle(int flag) { flags ^= flag; }

    void setMultiple(int flagMask) { flags |= flagMask; }
    void clearMultiple(int flagMask) { flags &= ~flagMask; }

    int getValue() const { return flags; }
    void setValue(int value) { flags = value; }

    void print() const {
        std::cout << "标志位: ";
        std::cout << "FLAG_A=" << isSet(FLAG_A) << " ";
        std::cout << "FLAG_B=" << isSet(FLAG_B) << " ";
        std::cout << "FLAG_C=" << isSet(FLAG_C) << std::endl;

        std::cout << "FLAG_D=" << isSet(FLAG_D) << " ";
        std::cout << "FLAG_E=" << isSet(FLAG_E) << " ";
        std::cout << "FLAG_F=" << isSet(FLAG_F) << " ";
        std::cout << "FLAG_G=" << isSet(FLAG_G) << std::endl;
    }
};

int main() {
    BitFlags bf;
    bf.set(FLAG_A | FLAG_C | FLAG_G);
    bf.print();

    if (bf.isSet(FLAG_C)) {
        std::cout << "FLAG_C已设置" << std::endl;
        bf.clear(FLAG_C| FLAG_G);
        bf.print();
    }

    return 0;
}

 

posted @ 2026-04-24 17:46  leochan007  阅读(9)  评论(0)    收藏  举报