zoukankan      html  css  js  c++  java
  • 子网掩码

    子网掩码计算方法
      子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。

    最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

    请看以下示例:

    运算演示之一:aa
    I P 地址  192.168.0.1
    子网掩码  255.255.255.0
    AND运算

    转化为二进制进行运算:
    I P 地址 11010000.10101000.00000000.00000001
    子网掩码 11111111.11111111.11111111.00000000
    AND运算

         11010000.10101000.00000000.00000000
    转化为十进制后为:

          192.168.0.0


    运算演示之二:
    I P 地址  192.168.0.254
    子网掩码  255.255.255.0
    AND运算

    转化为二进制进行运算:
    I P 地址 11010000.10101000.00000000.11111110
    子网掩码 11111111.11111111.11111111.00000000
    AND运算

         11010000.10101000.00000000.00000000
    转化为十进制后为:

          192.168.0.0


    运算演示之三:
    I P 地址  192.168.0.4
    子网掩码  255.255.255.0
    AND运算

    转化为二进制进行运算:
    I P 地址 11010000.10101000.00000000.00000100
    子网掩码 11111111.11111111.11111111.00000000
    AND运算

         11010000.10101000.00000000.00000000
    转化为十进制后为:

          192.168.0.0


    通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0

      所以计算机就会把这三台计算机视为是同一子网络。

    输入

    第一行是本机IP地址

    第二行是子网掩码

    第三行整数N,表示后面有N个IP地址

    第1个IP地址

    ......

    第N个IP地址

    输出

    计算并输出N个IP地址是否与本机在同一子网内。

    对于在同一子网的输出"INNER"

    对于在不同子网的输出“OUTER”

    --------------------------------------------------------------------------------------------------------------------

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #define max 32
    //#define _OJ_

    int
    trans(int n, int *elem, int i1)
    //将数字转换为二进制
    {
        int i2;i2 = (i1 / 8) * 8;
        while (n) {
          elem[i1--] = n % 2;//逆序赋值
          n = n / 2;
        }

        while (i1 >= i2)
          elem[i1--] = 0;
    }

    void
    fun(char *str, int *elem)
    {
        int i = 0, j = 0, n, l1 = 0, i1 = 0, i0 = 1;
        char a[10];

        while (str[i] != '') {
            for(l1 = 0;l1 < 10; l1++)//注意一定要初始化a[];否则值将不对
                a[l1] = 0;
                j = 0;

        if('0' <= str[i] && str[i] <= '9') {
            while((str[i] != '') &&'0' <= str[i] && str[i] <= '9')    {
            a[j++] = str[i];
            i++;
             }//收集数据并用atoi转换为整型
            n = atoi(a);//printf("n == %d ", n);
            i1 = i0 * 8;    trans(n, elem, i1 - 1);
            i0++;
             continue;
        }
        else
         i++;
       }


    }
    int main(int argc, char const *argv[]) {
    #ifndef _OJ_  //ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
    #endif

        int l1, l2, N;
        char str[50], str1[50], str2[50];
        int elem[50], elem1[50], elem2[50], elem3[50];
        gets(str);            gets(str1);
        fun(str, elem);       fun(str1, elem1);//elem1确定子网掩码

        for(l1 = 0;l1 < max; l1++) {
        if(elem[l1] == 1 && elem1[l1] == 1)
            elem2[l1] = 1;
        else
            elem2[l1] = 0;
         }//elem2确定AND的值

         scanf("%d", &N);
         while(N--) {
         scanf("%s", str2);
         fun(str2, elem);

        for(l1 = 0;l1 < max; l1++) {
        if(elem[l1] == 1 && elem1[l1] == 1)
            elem3[l1] = 1;
        else
            elem3[l1] = 0;
         }


         for(l1 = 0;l1 < max; l1++) {
          if(elem3[l1] != elem2[l1]) {
            printf("OUTER ");    break;
          }
       }//逐个进行比较
         if(l1 >= max)    printf("INNER ");

       }

        return 0;
    }

  • 相关阅读:
    错误页面提示大全
    http协议基础知识
    初识性能测试
    seo
    测试工程师的分类和发展方向
    Jsessionid和cookie的区别与联系
    nginx配置
    复盘能力
    开发自测方法
    OKR 目标关键成果法
  • 原文地址:https://www.cnblogs.com/airfand/p/5001714.html
Copyright © 2011-2022 走看看