Advertisement
avr39-ripe

bitFlag

Apr 30th, 2020
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. //00000000
  4.  
  5. enum Flags
  6. {
  7.     Flag1 = 1,      // 0b00000001
  8.     Flag2 = 2,      // 0b00000010
  9.     Flag3 = 4,      // 0b00000100
  10.     Flag4 = 8,      // 0b00001000
  11.     Flag5 = 16,     // 0b00010000
  12.     Flag6 = 32,     // 0b00100000
  13.     Flag7 = 64,     // 0b01000000
  14.     Flag8 = 128,    // 0b10000000
  15. };
  16.  
  17. struct BitFlag
  18. {
  19.     uint8_t flag{ 0 };
  20.  
  21.     void set(uint8_t flagNum, uint8_t value)
  22.     {
  23.         value ? flag |= flagNum : flag &= ~(flagNum);
  24.     };
  25.     int get(uint8_t flagNum)
  26.     {
  27.         return flag & flagNum ? 1 : 0;
  28.     };
  29.     int numToFlag(uint8_t num)
  30.     {
  31.         return 1 << (num);
  32.     };
  33.     void print()
  34.     {
  35.         for (int i = 0; i < 8; i++)
  36.         {
  37.             std::cout << "Flag" << i + 1 << " : " << get(numToFlag(i)) << '\n';
  38.         }
  39.  
  40.     }
  41. };
  42.  
  43. int main()
  44. {
  45.     BitFlag myFlag;
  46.     //myFlag.flag = 0b11110111;
  47.     //// 0b10011101
  48.     //// 0b00001000
  49.     //// 0b10011101
  50.  
  51.     //// 0b00001000
  52.     //// 0b11110111
  53.  
  54.     //// 0b10010101
  55.     //// 0b11110111
  56.     //// 0b10010101
  57.  
  58.     //std::cout << myFlag.get(Flag3) << '\n';
  59.  
  60.     myFlag.set(Flags::Flag5, 1);
  61.     myFlag.set(Flags::Flag8, 1);
  62.     myFlag.set(Flags::Flag1, 1);
  63.     myFlag.set(Flags::Flag4, 1);
  64.     myFlag.print();
  65.     std::cout << '\n';
  66.     myFlag.set(Flags::Flag4, 0);
  67.     myFlag.set(Flags::Flag3, 1);
  68.     myFlag.set(Flags::Flag8, 0);
  69.     myFlag.set(Flags::Flag7, 1);
  70.     myFlag.print();
  71.     std::cout << '\n';
  72.     myFlag.flag = 0; //Dirty hack! Do not do like that! :()
  73.     myFlag.print();
  74.     std::cout << '\n';
  75.     // 0b00010000
  76.     // 0b10000000
  77.     // 0b00000001
  78.     // 0b00001000
  79.  
  80.     // 0b10011001
  81.  
  82.     myFlag.set(Flags::Flag5 | Flags::Flag8 | Flags::Flag1 | Flags::Flag4, 1);
  83.     myFlag.print();
  84.     std::cout << '\n';
  85.     myFlag.set(Flags::Flag5 | Flags::Flag8 | Flags::Flag1 | Flags::Flag4, 0);
  86.     myFlag.print();
  87.     std::cout << '\n';
  88.     myFlag.set(Flags::Flag1, 0);
  89.     myFlag.set(Flags::Flag4, 0);
  90.     myFlag.set(Flags::Flag2, 1);
  91.     myFlag.set(Flags::Flag7, 1);
  92.     myFlag.print();
  93. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement