题目描述:
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
Java实现:
import java.util.*;
public class Main{
public static void main(String arg[]){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String[] mask=sc.next().split("\\.");
String[] ip1=sc.next().split("\\.");
String[] ip2=sc.next().split("\\.");
if(!(check(mask)&&check(ip1)&&check(ip2))==true){
System.out.println(1);
return;
}
boolean flag=false;
for(int i=0;i<mask.length;i++){
if((Integer.parseInt(mask[i])&Integer.parseInt(ip1[i]))==
(Integer.parseInt(mask[i])&Integer.parseInt(ip2[i]))){
flag=true;
}else{
flag=false;
break;
}
}
if(flag){
System.out.println(0);
}else{
System.out.println(2);
}
}
}
public static boolean check(String[] address){
for(int i=0;i<address.length;i++){
if(0>Integer.parseInt(address[i])||Integer.parseInt(address[i])>255)
return false;
}
return true;
}
}
知识点:
- 这里判断子网掩码和IP地址合法与否仅判断是否在0~255之间,而没有判断子网掩码需要1都在前面
- 将子网掩码和IP地址分为四段整数,依次按位&,看是否相等,只要有一段不相等,都不在同一子网内