版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wojiushiwo945you/article/details/80537561
IP/掩码位来表示一段IP范围,那么怎么通过掩码位计算出对应的子网掩码呢?
基本概念:掩码位即网络地址的位数。例如192.168.11.130/31表示网络地址有31位,主机地址有1位,那么31对应的子网掩码就是255.255.255.254(31个1+0)
通过移位计算,得到主机最大值,和网络地址最大值,图解原理如下:
计算掩码位,就是得到掩码位的二进制序列,然后每隔8位转换为十进制。
Java的Integer.parseInt可以将指定进制的字符串序列转换为int类型。输入一个掩码位,得到对应的子网掩码的点分十进制表示的代码如下:
for(int i=1;i<32;i++) {
int ip = 0xFFFFFFFF << (32 - i);
String binaryStr = Integer.toBinaryString(ip);
StringBuffer buffer = new StringBuffer();
for(int j=0;j<4;j++) {
int beginIndex = j*8;
buffer.append(Integer.parseInt(binaryStr.substring(beginIndex, beginIndex+8), 2)).append(".");
}
System.out.println("net mask "+i+" ,submask:"+buffer.substring(0,buffer.length()-1));
}
上述代码即可输出1-31掩码位对应的子网掩码列表。其中
0xFFFFFFFF << (32 - i)就是得到对应的二进制序列。