#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;
}