avr39ripe

cppBitFlag

Jun 15th, 2021 (edited)
620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. enum Flags
  4. {
  5.     f1 = 1,     // 0b00000001
  6.     f2 = 2,     // 0b00000010
  7.     f3 = 4,     // 0b00000100
  8.     f4 = 8,     // 0b00001000
  9.     f5 = 16,    // 0b00010000
  10.     f6 = 32,    // 0b00100000
  11.     f7 = 64,    // 0b01000000
  12.     f8 = 128    // 0b10000000
  13. };
  14.  
  15. struct BitFlag
  16. {
  17.     uint8_t flag;
  18.     bool get(uint8_t flagP)
  19.     {
  20.         return (flag & flagP);
  21.     };
  22.  
  23.     void set(uint8_t flagP, bool val)
  24.     {
  25.         val ? flag |= flagP : flag &= ~(flagP);
  26.     }
  27.  
  28.     uint8_t numToFlag(uint8_t num)
  29.     {
  30.         return 1 << num;
  31.     }
  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.     void printBits()
  42.     {
  43.         uint8_t byte{ flag };
  44.         const uint8_t mask{ 1 << 7 };
  45.  
  46.         for (int i{ 0 }; i < 8; byte<<=1, ++i)
  47.         {
  48.             std::cout << (bool)(byte & mask);
  49.         }
  50.     }
  51. };
  52.  
  53. struct Features
  54. {
  55.     bool f1;
  56.     bool f2;
  57.     bool f3;
  58.     bool f4;
  59.     bool f5;
  60.     bool f6;
  61.     bool f7;
  62.     bool f8;
  63. };
  64.  
  65. int main()
  66. {
  67.     BitFlag myFlag;
  68.     myFlag.flag = 0;
  69.     //myFlag.flag = 0b10110101;
  70.  
  71.     //std::cout << "f6 is: " << myFlag.get(Flags::f6) << '\n'; //1
  72.     //std::cout << "f2 is: " << myFlag.get(Flags::f2) << '\n'; //0
  73.     //std::cout << "f3 is: " << myFlag.get(Flags::f3) << '\n'; //1
  74.     //std::cout << '\n';
  75.  
  76.     myFlag.print();
  77.     std::cout << '\n';
  78.     myFlag.printBits();
  79.     std::cout << '\n';
  80.  
  81.     myFlag.set(Flags::f3, true);
  82.     myFlag.set(Flags::f3, false);
  83.     myFlag.set(Flags::f7, false);
  84.     myFlag.set(Flags::f1, true);
  85.     myFlag.set(Flags::f5, true);
  86.  
  87.     myFlag.set(Flags::f3 | Flags::f2 | Flags::f6, true);
  88.     myFlag.print();
  89.     std::cout << '\n';
  90.     myFlag.printBits();
  91.     std::cout << '\n';
  92.    
  93.     myFlag.set(Flags::f7 | Flags::f2 | Flags::f1, false);
  94.     myFlag.print();
  95.     std::cout << '\n';
  96.     myFlag.printBits();
  97.     std::cout << '\n';
  98. }
Add Comment
Please, Sign In to add comment