子网掩码

子网掩码计算方法
 
子网掩码是用来判断任意两台计算机的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] != ‘\0‘) {
        for(l1 = 0;l1 < 10; l1++)//注意一定要初始化a[];否则值将不对
            a[l1] = 0;
            j = 0;

if(‘0‘ <= str[i] && str[i] <= ‘9‘) {
        while((str[i] != ‘\0‘) &&‘0‘ <= str[i] && str[i] <= ‘9‘)    {
        a[j++] = str[i];
        i++;
         }//收集数据并用atoi转换为整型
        n = atoi(a);//printf("n == %d\n", 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\n");    break;
      }
   }//逐个进行比较
     if(l1 >= max)    printf("INNER\n");

}

return 0;
}

时间: 2024-10-02 19:48:58

子网掩码的相关文章

计算子网掩码中存在的主机数

一个局域网中某台主机的ip地址为176.68.160.12,使用22位作为网络 ,那么该局域网的子网掩码为____,最多可以连接的主机数为____.该局域网的子网掩码是255.255.252.0最多可以连接的主机数量为1022台计算子网掩码的过程是:子网掩码是由连续的"1"和连续的"0"构成,所以既然网络位是22位,而子网掩码一共是有32位组成,说明前22位都是1,后10位都是0 因此用2进制表示就是11111111 11111111 11111100 000000

IP地址与子网掩码

一.IP地址 IP地址:Internet上每台主机都必须有一个唯一的地址以区别于其他主机,这个地址就是Internet地址,也称作IP地址: IPv4(第四版本的IP协议)是构成现今互联网技术的基石协议: IP地址的构成: IP地址由32位二进制构成,共约40亿个,由网络地址和主机地址构成:一个IP地址分为四段:a.b.c.d ,段与段之间用原点分开. IP地址表示方法:二进制形式和点分十进制形式: IP地址的分类:5类 A类地址,B类地址,C类地址,D类地址,E类地址 IP地址的分类是根据第一

iOS获取WIFI的IP、子网掩码,以及域名转IP

获取WIFI需要的头文件: #import "GetCurrentIP.h" #import <ifaddrs.h> #import <arpa/inet.h> #import <SystemConfiguration/CaptiveNetwork.h> #include <netdb.h> #include <net/if.h> #import <dlfcn.h> #include <sys/socket.

用python实现子网掩码地址与位长的相互转换

某日,使用centos7,发现网络配置时,子网掩码需要手动转换:因为centos7的网络配置方式为: nmcli connection enp4s0 modify ipv4.methord manual ipv4.address "192.168.1.120/24" ipv4.gateway "192.168.1.1" ipv4.dns "223.5.5.5" 其中没有子网掩码的配置项.于是,写一函数,实现子网掩码和位长的相互转换. 一:子网掩码

Ip地址和子网掩码和CIDR无间别域间路由

开始,网络的制定者将网络划分为A,B,C三种网络,想这个样子: A类网:  xxx.0.0.0         子网掩码:255.0.0.0 xxx.0.0.0/8 //后面的数字代表网络地址的字段 B类网:  xxx.xxx.0.0      子网掩码:255.255.0.0   xxx.xxx.0.0/16 C类网:  xxx.xxx.xxx.0  子网掩码:255.255.255.0     xxx.xxx.xxx.0/24 A类网255*255*255=16581375个地址,1千6百多

js判断ip地址,子网掩码,网关的逻辑性检查

因为要做静态地址配置的js校验,找了好多资料发现网上都是关于ip,mask的有效性检查,没有ip,submask,gateway的逻辑性判断,自己写下代码供需要的人参考. 普及下网关地址知识: 就是进行与运算1与1得1,1与0为0,0与0为0.首先把ip和子网掩码展开 10.70.64.223 00001010 .01000110.01000000.11011111 255.255.255.0 111111111.11111111.11111111.00000000 网段就是 00001010

几句话掌握子网掩码、ip地址、主机号、网络号、网络地址、广播地址

1.191.172.16.10.33/27 中的/27也就是说子网掩码是255.255.255.224 即27个全1 2.从子网掩码255.255.255.252得出其网络位为30位,所以只有剩下的2位为主机位,主机位全零的为网络地址,主机位全1的为广播地址,剩余的主机号码为主机地址范围 3.公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责.这些IP地址分配给注册并向Inter NIC提出申

ip、子网掩码、网络数、主机数概念

常见的几类公网ip地址: A类ip地址范围是:0.0.0.0-127.255.255.255   可拥有主机16777214-2台主机,适用于大型网络 B类ip地址范围是:128.0.0.0-191.255.255.255   可拥有65534-2台主机,适用于中型网络 C类ip地址范围是:192.0.0.0-223.255.255.255   可拥有254-2台主机,适用于小网络 常见的几类私有的ip地址 A类IP地址范围是:10.0.0.0-10.255.255.255 B类ip地址范围是:

可变长子网掩码 VLSM

2014-05-05 17:26:08 标签:IP地址 路由器 技术部 路由表 长子 VLSM的介绍: VLSM(VLSM(Variable Length Subnetwork Mask,可变长子网掩码) 是为了有效的使用CIDR(无类别域间路由)和路由汇总来控制路由表的大小,并可以对子网进行层次化编址,以便最有效的利用现有的地址空间.在使用VLSM时,所采用的路由协议必须能够支持它,这些路由协议包括RIPv2,OSPF,EIGRP,IS-IS和BGPv4:如果在一个运行RIPv1或IGRP的网