int[] ip = {192, 168, 1, 100};
/* // 测试代码
System.out.println(Integer.toBinaryString(ip[0]));
System.out.println(Integer.toBinaryString(ip[1]));
System.out.println(Integer.toBinaryString(ip[2]));
System.out.println(Integer.toBinaryString(ip[3]));
System.out.println(" & 0xff: "); // 不够八位的补齐八位
System.out.println(Integer.toBinaryString(ip[0] & 0xff));
System.out.println(Integer.toBinaryString(ip[1] & 0xff));
System.out.println(Integer.toBinaryString(ip[2] & 0xff));
System.out.println(Integer.toBinaryString(ip[3] & 0xff));
System.out.println("bit compute:"); // 不同部分位移8的倍数
System.out.println(Integer.toBinaryString((ip[0] & 0xff) << 24 ));
System.out.println(Integer.toBinaryString((ip[1] & 0xff) << 16 ));
System.out.println(Integer.toBinaryString((ip[2] & 0xff) << 8 ));
System.out.println(Integer.toBinaryString((ip[3] & 0xff) << 0 ));
*/
// 通过位或操作把位移之后的数加起来,得到的结果就是能够表示ip的整数
int v = ((ip[0] & 0xff) << 24 ) | ((ip[1] & 0xff) << 16 )
| ((ip[2] & 0xff) << 8 ) | ((ip[3] & 0xff) << 0 );
System.out.println(Integer.toBinaryString(v));
System.out.println(v);
/* // 测试反向位移操作
System.out.println("reverse ip test ");
System.out.println(Integer.toBinaryString(0xff));
System.out.println(Integer.toBinaryString(v>>24));
System.out.println(Integer.toBinaryString(v>>24 & 0xff));
System.out.println(Integer.toBinaryString(v>>16));
System.out.println(Integer.toBinaryString(v>>16 & 0xff));
System.out.println(Integer.toBinaryString(v>>8));
System.out.println(Integer.toBinaryString(v>>8 & 0xff));
System.out.println(Integer.toBinaryString(v));
System.out.println(Integer.toBinaryString(v & 0xff));
*/
// 整数转化为ip数据
System.out.println("reverse ip: ");
ip[0] = v>>24 & 0xff;
ip[1] = v>>16 & 0xff;
ip[2] = v>>8 & 0xff;
ip[3] = v & 0xff;
for(int i: ip) {
System.out.print(i+".");
}