Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

36 rader
932 B

  1. #include <iostream>
  2. void printIp(const std::string &name, uint32_t ip) {
  3. std::cout << name << ": " << (ip >> 24) << '.'
  4. << ((ip << 8) >> 24) << '.'
  5. << ((ip << 16) >> 24) << '.'
  6. << ((ip << 24) >> 24) << '\n';
  7. }
  8. int main() {
  9. uint32_t a, b, c, d, cidr;
  10. char temp;
  11. std::cin >> a >> temp >> b >> temp >> c >> temp >> d >> temp >> cidr;
  12. uint32_t ip, mask = 0;
  13. ip = (a << 24) + (b << 16) + (c << 8) + d;
  14. for (uint32_t i = 0; i < cidr; ++i)
  15. mask += (1u << (31u-i));
  16. uint32_t neta = ip & mask, broadcast = neta;
  17. for (uint32_t i = 0; i < 32u-cidr ; ++i) {
  18. broadcast += (1 << i);
  19. }
  20. uint32_t minhost= neta+1, maxhost = broadcast-1;
  21. printIp("IP ADDRESS", ip);
  22. printIp("NETWORK ADDRESS", neta);
  23. printIp("BROADCAST ADDRESS", broadcast);
  24. printIp("SUBNET MASK", mask);
  25. printIp("MIN HOST ADDRESS", minhost);
  26. printIp("MAX HOST ADDRESS", maxhost);
  27. std::cout << "NUMBER OF HOSTS: " << (maxhost-minhost+1) << '\n';
  28. }