Problem D: 子网掩码

Problem D: 子网掩码

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 50   Solved: 15
[ 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

HINT

这一题主要考&的应用!

位运算操作符;即将每个操作数转换成对应的二进制数,然后对每一位进行与运算;eg:21&13==10101&01101==00100
10101
01100
--------------
00100

这里还涉及到储存的问题,有很多人用字符数组储存,我感觉这里是没有必要的!

#include<stdio.h>
int main()
{
    int a1,b1,c1,d1,e,f,g,h,a2,b2,c2,d2,n,a3,b3,c3,d3,a4,b4,c4,d4;
	scanf("%d.%d.%d.%d",&a1,&b1,&c1,&d1);
	scanf("%d.%d.%d.%d",&e,&f,&g,&h);
	a3=a1&e;b3=b1&f;c3=c1&g;d3=d1&h;
//	printf("%d %d %d %d",a3,b3,c3,d3);
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d.%d.%d.%d",&a2,&b2,&c2,&d2);
		a4=a2&e;b4=b2&f;c4=c2&g;d4=d2&h;
	//	printf("%d %d %d %d",a4,b4,c4,d4);
		if((a3==a4)&&(b3==b4)&&(c3==c4)&&(d3==d4))
		{
			printf("INNER\n");
		}
		else
		{
			printf("OUTER\n");
		}
	}

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值