Advertisement
avr39ripe

BV024bitOpIPAddrExample

Feb 4th, 2021
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.     // 0xffff
  6.     // hex system 0..9, a - 10 b - 11 c -12 d -13 e -14 f -15
  7.     // ff -> f * 16 ^ 0 + f * 16 ^ 1 = 15 + 240 = 255
  8.     //uint8_t byte{0x1a}; // 16^0 * a + 16^1 * 1 = 1 * 10 + 16 * 1 = 10 + 16 = 26
  9.     //uint8_t byte{ 0b1111 }; // (1 * 2 ^ 0) + (1 * 2 ^ 1) + (1 * 2 ^ 2) + (1 * 2 ^ 3) = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15
  10.  
  11.     // ~ - bitwise NOT - unary op
  12.     // << - bitwise shift left - binary op
  13.     // >> - bitwise shift right - binary op
  14.     // | - bitwise OR - binary op
  15.     // & - bitwise AND - binary op
  16.     // ^ - bitwise XOR - binary op
  17.  
  18.     // <<= a = a << 1 -> a <<= 1
  19.     // >>= a = a >> 4 -> a >>= 4
  20.     // |= a = a | b -> a |= b
  21.     // &= a = a & 0b0101 -> a &= 0b0101
  22.     // ^= a = a ^ 42 -> a ^= 42
  23.  
  24.     // /4
  25.     uint8_t ip1{ 0b01100111 };
  26.     uint8_t ip2{ 0b01101101 };
  27.     uint8_t ip3{ 0b10100111 };
  28.     uint8_t ip4{ 0b01101110 };
  29.  
  30.     uint8_t mask{ 0b11110000 };
  31.     uint8_t maskLength{0};
  32.  
  33.     bool sameNet{ false };
  34.     sameNet = ((ip1 & mask) == (ip3 & mask));
  35.  
  36.     std::cout << std::boolalpha << sameNet << '\n';
  37.  
  38.     //for (uint8_t invMask{ (uint8_t)~mask }; (invMask >>= 1); --maskLength);
  39.     for (uint8_t maskSh{ mask }; maskSh; maskSh <<= 1, ++maskLength);
  40.  
  41.     /*for (uint8_t maskSh{ mask }; maskSh; maskSh <<= 1)
  42.     {
  43.         ++maskLength;
  44.     }
  45.  
  46.     {
  47.         uint8_t maskSh{ mask };
  48.         while (maskSh != 0)
  49.         {
  50.             maskSh <<= 1;
  51.             ++maskLength;
  52.         }
  53.     }*/
  54.    
  55.  
  56.     std::cout << "maskLength = " << +maskLength << '\n';
  57.  
  58.     //ip1   0b01100111
  59.     //mask  0b11110000
  60.  
  61.     //ip1   0b01100111
  62.     //~mask 0b00001111
  63.     //      0b00000111
  64.  
  65.     uint8_t host{0};
  66.     uint8_t net{0};
  67.        
  68.  
  69.     net = ip1 >> maskLength;
  70.     host = ip1 & (~mask);
  71.  
  72.     std::cout << "ip1 = " << +ip1 << " net = " << +net << " host = " << +host <<'\n';
  73.  
  74.     net = ip2 >> maskLength;
  75.     host = ip2 & (~mask);
  76.  
  77.     std::cout << "ip2 = " << +ip2 << " net = " << +net << " host = " << +host << '\n';
  78.  
  79.     net = ip3 >> maskLength;
  80.     host = ip3 & (~mask);
  81.  
  82.     std::cout << "ip3 = " << +ip3 << " net = " << +net << " host = " << +host << '\n';
  83.  
  84.     net = ip4 >> maskLength;
  85.     host = ip4 & (~mask);
  86.  
  87.     std::cout << "ip4 = " << +ip4 << " net = " << +net << " host = " << +host << '\n';
  88.  
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement