Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum flag_t {
- FLAG_1 = 0x1,
- FLAG_2 = 0x2,
- ...
- FLAG_130 = 0x400000000000000000000000000000000,
- };
- struct flag_t
- {
- unsigned int flag1 : 1;
- unsigned int flag2 : 1;
- unsigned int flag3 : 1;
- (...)
- unsigned int flag130 : 1;
- (...)
- unsigned int flag1204 : 1; // for fun
- };
- #define ITEM_FLG_01 0x0001 // array offset 0, bit 0
- #define ITEM_FLG_02 0x0002 // array offset 0, bit 1
- #define ITEM_FLG_03 0x0101 // array offset 1, bit 0
- #define ITEM_FLG_04 0x0102 // array offset 1, bit 1
- #define ITEM_FLG_05 0x0201 // array offset 2, bit 0
- #define ITEM_FLG_06 0x0202 // array offset 2, bit 1
- #define ITEM_FLG_07 0x0301 // array offset 3, bit 0
- #define ITEM_FLG_08 0x0302 // array offset 3, bit 1
- #define ITEM_FLG_10 0x0908 // array offset 9, bit 7
- #define SET_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) |= (b) & 0xf)
- #define TOG_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) ^= (b) & 0xf)
- #define CLR_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) &= ~ ((b) & 0xf))
- #define TST_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) & ((b) & 0xf))
- typedef unsigned char BitSet[10];
- BitSet uchR = { 0 };
- int bValue;
- SET_BIT(uchR, ITEM_FLG_01);
- bValue = TST_BIT(uchR, ITEM_FLG_01);
- SET_BIT(uchR, ITEM_FLG_03);
- TOG_BIT(uchR, ITEM_FLG_03);
- TOG_BIT(uchR, ITEM_FLG_04);
- CLR_BIT(uchR, ITEM_FLG_05);
- CLR_BIT(uchR, ITEM_FLG_01);
- void AndBits(BitSet s1, const BitSet s2)
- {
- size_t nLen = sizeof(BitSet);
- for (; nLen > 0; nLen--) {
- *s1++ &= *s2++;
- }
- }
- void OrBits(BitSet s1, const BitSet s2)
- {
- size_t nLen = sizeof(BitSet);
- for (; nLen > 0; nLen--) {
- *s1++ |= *s2++;
- }
- }
Add Comment
Please, Sign In to add comment