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

    Problem G: 子网掩码

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 40  Solved: 23
    [Submit][Status][Web Board]

    Description

    子网掩码计算方法
     
    子网掩码是用来判断任意两台计算机的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

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

    Input

    第一行是本机IP地址

    第二行是子网掩码

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

    第1个IP地址

    ......

    第N个IP地址

    Output

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

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

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

    Sample Input

    192.168.0.1
    255.255.255.0
    3
    192.168.0.2
    192.168.0.254
    192.168.1.2
    

    Sample Output

    INNER
    INNER
    OUTER
    ////////////////////////
    #include"stdio.h"
    #include"stdlib.h"
    #include"string.h"
    int main()
    {
        int a[4];
        int a1[4];
        int a2[4];
        int a3[4];
        int a4[4];
        char aa[100],bb[100],cc[100];
        char *p;
        int i=0;
        scanf("%s",aa);
        p=strtok(aa,".");
        while(p!=NULL)
        {
            a[i++]=atoi(p);
            p=strtok(NULL,".");             
        }   
       i=0;
       scanf("%s",bb);
       char  *p1;
       p1=strtok(bb,".");
       while(p1!=NULL)
       {
          a1[i++]=atoi(p1);
          p1=strtok(NULL,".");               
       }
       for(i=0;i<4;i++)
          a2[i]=a[i]&a1[i];
          int t;
          scanf("%d",&t);
          for(int j=0;j<t;j++)
          {
             char  *p2;
             i=0;
             scanf("%s",cc);
             p2=strtok(cc,".");
             while(p2!=NULL)
             {
                a3[i++]=atoi(p2);
                p2=strtok(NULL,".");              
             }       
            for(i=0;i<4;i++)
              a4[i]=a1[i]&a3[i];
            for(i=0;i<4;i++)
              if(a2[i]!=a4[i])
              {
                 printf("OUTER\n");
                 break;               
              }
            if(i==4)
            printf("INNER\n");
          }
        //system("pause");
        return 0; 
    }
  • 相关阅读:
    Windows 2008 R2 远程桌面服务(八)远程桌面服务器安全设置
    从硬盘上安装SQLServer2005的问题
    在 Windows server 2008 下计划任务无法正常执行bat批处理文件
    两部搞定windows server 2008 R2 中IE8的增强安全配置功能
    Microsoft SQL Server 2005 Service Pack 4 RTM
    学习地址
    Windows 2008 远程桌面如何设置两个用户共享一个会话
    Windows Server 2008 启用无线网卡
    远程桌面连接指定会话(Session)
    固定宽度弹性布局(以适应各种各辨率)
  • 原文地址:https://www.cnblogs.com/QQbai/p/2124314.html
Copyright © 2011-2022 走看看