子网掩码计算方法
子网掩码是用来判断任意两台计算机的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
所以计算机就会把这三台计算机视为是同一子网络。
using namespace std;
#include <string.h>
#include <iostream>
using namespace std;
#include <string>
string And(string ip1,string ip2,string dns){
int lip1=ip1.length(),ldns=dns.length(),lip2=ip2.length();
int ip1Arr[4]={0},ip2Arr[4]={0},dnsArr[4]={0};
int j=0;
for(int i=0;i<4;i++ ){
for(j;j<lip1;j++)
{
if(ip1[j]=='.'){
break;
}
ip1Arr[i]=ip1Arr[i]*10+ip1[j]-'0';
}
j++
}
j=0;
for(int i=0;i<4;i++ ){
for(j;j<lip2;j++){
if(ip2[j]=='.')
break;
ip2Arr[i]=ip2Arr[i]*10+ip2[j]-'0';
}
j++
}
j=0;
for(int i=0;i<4;i++ ){
for(j;j<ldns;j++){
if(dns[j]=='.')
break;
dnsArr[i]=dnsArr[i]*10+dns[j]-'0';
}
j++
}
for(int i=0;i<4;i++)
cout<<ip1Arr[i];
cout<<endl;
for(int i=0;i<4;i++){
int result1=ip1Arr[i]&dnsArr[i];
int result2=ip2Arr[i]&dnsArr[i];
cout<<result1<<"dd"<<result2<<endl;
if(result1!=result2){
return "OUTER";
break;
}
}
return "INNER";
}
int main(){
string ip0,dns;
cin>>ip0>>dns;
int num;
cin>>num;
while(num){
string ip1;
cin>>ip1;
cout<<And(ip0,ip1,dns);
num--;
}
}