Guest User

Untitled

a guest
Mar 21st, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. enum flag_t {
  2. FLAG_1 = 0x1,
  3. FLAG_2 = 0x2,
  4. ...
  5. FLAG_130 = 0x400000000000000000000000000000000,
  6. };
  7.  
  8. struct flag_t
  9. {
  10. unsigned int flag1 : 1;
  11. unsigned int flag2 : 1;
  12. unsigned int flag3 : 1;
  13. (...)
  14. unsigned int flag130 : 1;
  15. (...)
  16. unsigned int flag1204 : 1; // for fun
  17. };
  18.  
  19. #define ITEM_FLG_01 0x0001 // array offset 0, bit 0
  20. #define ITEM_FLG_02 0x0002 // array offset 0, bit 1
  21. #define ITEM_FLG_03 0x0101 // array offset 1, bit 0
  22. #define ITEM_FLG_04 0x0102 // array offset 1, bit 1
  23. #define ITEM_FLG_05 0x0201 // array offset 2, bit 0
  24. #define ITEM_FLG_06 0x0202 // array offset 2, bit 1
  25. #define ITEM_FLG_07 0x0301 // array offset 3, bit 0
  26. #define ITEM_FLG_08 0x0302 // array offset 3, bit 1
  27. #define ITEM_FLG_10 0x0908 // array offset 9, bit 7
  28.  
  29. #define SET_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) |= (b) & 0xf)
  30. #define TOG_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) ^= (b) & 0xf)
  31. #define CLR_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) &= ~ ((b) & 0xf))
  32. #define TST_BIT(p,b) (*((p) + (((b) >> 8) & 0xf)) & ((b) & 0xf))
  33.  
  34. typedef unsigned char BitSet[10];
  35.  
  36. BitSet uchR = { 0 };
  37. int bValue;
  38.  
  39. SET_BIT(uchR, ITEM_FLG_01);
  40. bValue = TST_BIT(uchR, ITEM_FLG_01);
  41. SET_BIT(uchR, ITEM_FLG_03);
  42. TOG_BIT(uchR, ITEM_FLG_03);
  43. TOG_BIT(uchR, ITEM_FLG_04);
  44. CLR_BIT(uchR, ITEM_FLG_05);
  45. CLR_BIT(uchR, ITEM_FLG_01);
  46.  
  47. void AndBits(BitSet s1, const BitSet s2)
  48. {
  49. size_t nLen = sizeof(BitSet);
  50.  
  51. for (; nLen > 0; nLen--) {
  52. *s1++ &= *s2++;
  53. }
  54. }
  55.  
  56. void OrBits(BitSet s1, const BitSet s2)
  57. {
  58. size_t nLen = sizeof(BitSet);
  59.  
  60. for (; nLen > 0; nLen--) {
  61. *s1++ |= *s2++;
  62. }
  63. }
Add Comment
Please, Sign In to add comment