avr39ripe

cppBitOperationsExamples

Nov 1st, 2021 (edited)
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. //struct  Flags
  5. //{
  6. //  bool f0;
  7. //  bool f1;
  8. //  bool f2;
  9. //  bool f3;
  10. //  bool f4;
  11. //  bool f5;
  12. //  bool f6;
  13. //  bool f7;
  14. //};
  15.  
  16. struct  Flags
  17. {
  18.     uint8_t flags; // 0b10101010
  19.  
  20.     void set(uint8_t flag, bool val);
  21.     bool get(uint8_t flag);
  22.     void print(); // outputs flag in binary form
  23. };
  24.  
  25. // Flags myFlags;               0b00000000
  26. // myFlags.set(0,true);         0b00000001
  27. // myFlags.set(2,true);         0b00000101
  28. // myFlags.get(7); //false
  29. // myFlags.get(0); //true
  30. // myFlags.set(0,false);        0b00000100
  31. // // myFlags.get(0); //false
  32.  
  33.  
  34.  
  35.  
  36.  
  37. char* encodecode(char* str, char key)
  38. {
  39.     char* start{ str };
  40.  
  41.     for (; *str; *str ^= key, ++str);
  42.  
  43.     return start;
  44. }
  45.  
  46. int maskLen(uint8_t mask)
  47. {
  48.     int maskLen{ 0 };
  49.  
  50.     for (;mask; mask <<= 1, ++maskLen);
  51.  
  52.     return maskLen;
  53. }
  54.  
  55. int main()
  56. {
  57.     // << bit shift left
  58.     // >> bit shift right
  59.    
  60.     // ~ bitwise NOT - ! - logical NOT
  61.     // | bitwise OR - || or - logical OR
  62.     // & bitwise AND - && and - logical AND
  63.  
  64.     // ^ bitwise XOR - eXclusive OR
  65.  
  66.  
  67.     // a <<= b -> a = a << b
  68.     // a >>=b -> a = a >> b
  69.     // a |= b -> a = a | b
  70.     // a &= b -> a = a & b
  71.     // a ^= b -> a = a ^ b
  72.  
  73.  
  74.     // 16 [0-9, a-f]
  75.     // 12
  76.     // 12 % 10  -> 2
  77.     // 12 / 10 -> 1
  78.     // 1 % 10 -> 1
  79.  
  80.  
  81.     //int answer{ 5 };
  82.     // 101
  83.     // 5 % 2 -> 1
  84.     // 5 / 2 -> 2
  85.     // 2 % 2 -> 0
  86.     // 2 /2 -> 1
  87.     // 1 % 2 -> 1
  88.  
  89.  
  90.     //int number{ 26 };
  91.     // 0x1a
  92.     // 26 % 16 -> 10
  93.     // 26 / 16 -> 1
  94.     // 1 % 16 -> 1
  95.  
  96.  
  97.     ///int binAnswer{ 0x101 }; // 2 ^ 0 * 1 + 2 ^ 1 * 0 + 2 ^ 2 * 1 =1 +  0 + 4 = 5
  98.  
  99.  
  100.     //int digit{ 10 }; // 'A'
  101.  
  102.     //std::cout << 'A' + (digit - 10)<< '\n';
  103.  
  104.     uint16_t byteA{ 0b00000100 };
  105.     uint16_t byteB{ 0b00001101 };
  106.  
  107.  
  108.  
  109.     uint8_t result{ 0 };
  110.  
  111.     result = byteA ^ byteB;
  112.  
  113.     // 0b00000100
  114.     // 0b00001101
  115.  
  116.     // 0b00001001
  117.     // 0b00001101
  118.  
  119.     // 0b00000100
  120.    
  121.     // 0b00000101
  122.     //~
  123.  
  124.     // 0b11111010 //250
  125.     //~
  126.     // 0b00000101
  127.     // 0b00000101
  128.     // << 2
  129.     // 0b00010100
  130.    
  131.     //result = ((byte << 2) >> 2);
  132.  
  133.  
  134.     std::cout << +result << '\n';
  135.  
  136.     char str[]{ "Hello, encrypted world!" };
  137.  
  138.     std::cout << str << '\n';
  139.     std::cout << encodecode(str, 'Z') << '\n';
  140.     std::cout << encodecode(str, 'X') << '\n';
  141.  
  142.     uint8_t ipA{ 0b10110001 };
  143.     uint8_t ipB{ 0b10110101 };
  144.     uint8_t ipC{ 0b11010101 };
  145.     uint8_t ipD{ 0b11010011 };
  146.  
  147.     uint8_t mask{ 0b11110000 };
  148.  
  149.     //ipA & mask
  150.     //0b10110001
  151.     //0b11110000
  152.    
  153.     //0b10110000
  154.  
  155.     //ipB & mask
  156.     //0b10110101
  157.     //0b11110000
  158.    
  159.     //0b10110000
  160.  
  161.     //ipD
  162.     //0b11010011
  163.     //0b11110000
  164.  
  165.     //0b11010000
  166.     //0b10110000
  167.  
  168.     bool oneNet{ (ipA & mask) == (ipD & mask)};
  169.  
  170.     uint8_t hostAddr{ (uint8_t)(ipA & (~mask)) };
  171.     uint8_t netAddr{ uint8_t(ipA >> maskLen(mask)) };
  172.  
  173.  
  174.     std::cout << std::boolalpha << oneNet << '\n';
  175.    
  176.     std::cout << "IP: " << +ipA << '\n';
  177.     std::cout << "Mask length: " << maskLen(mask) << '\n';
  178.     std::cout << "Net addr: " << +netAddr << '\n';
  179.     std::cout << "Host addr: " << +hostAddr << '\n';
  180.  
  181.     // 192  168     1       129 - 128 - 131 /30 /24 /23
  182.     // 255  255     255     252
  183.     //                      1000 00 00
  184.     //                      1111 11 00
  185. }  
  186.  
Add Comment
Please, Sign In to add comment