问:Ipv4地址可以转为整数类型的数字?
思路:ip地址分为四段,每段都是 0~255 之间的数,每段可以用 8 位来装下它,即4x8=32
ip字符串转int:
{
String ip = "192.16.1.102";
String[] ips = ip.split("\\.");
int res = 0;//最初值00000000 00000000 00000000 00000000
//0~255 4*8=32 11111111 11111111 11111111 11111111
for (int i = 0; i < ips.length; i++)
{
int temp = Integer.parseInt(ips[i]) << 8 * i;
//temp 192->1100 0000 4096->10000 0000 0000
res = res | temp;
//结果保留1--1100110000000010001000011000000
}
}
以255.255.255.255这个地址为例,或运算过程如下:
1、0 | 1111 1111 --255<<0
2、1111 1111 | 1111111100000000 --255<<8
3、11111111 11111111 | 111111110000000000000000 --255<<16
补0的过程如上,值前补0再做或运算
int位转换为ip字符串:
//int 位转换为 ip 字符串
String[] ips = new String[4];
int ip = stringToIp();
for (int i = 0; i < 4; i++) {
int temp = 255 << (8 * i);
int and = ip & temp;
ips[i] = String.valueOf(and >>> 8 * i);
}
System.out.println(String.join(".", ips));
ip - 1100110000000010001000011000000
1、ip & 1111 1111 --11000000
2、ip & 11111111 00000000 --0001000000000000
涉及知识点
数据 | 字节 | 标题3 |
---|---|---|
int | 4位字节 | 1字节=8比特 4*8=32比特 |
---------------------- | ------------- | ----------------- |
我们来理解下十进制到二进制的转换
十进制 | 二进制 | 十进制 | 二进制 |
---|---|---|---|
0 | 0 | 9 | 1001 |
1 | 1 | 10 | 1010 |
2 | 10 | 11 | 1011 |
3 | 11 | 12 | 1100 |
4 | 100 | 13 | 1101 |
5 | 101 | 14 | 1110 |
6 | 110 | 15 | 1111 |
7 | 111 | 16 | 10000 |
8 | 1000 | 17 | 10001 |
位与( & )
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
与0相与可清零
与1相与可保留原值
取一个数中指定位,如取A的低4位
e.g.
A=10101110
A & 0000 1111 = 0000 1110
位或( | )
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
与0相或可保留原值
与1相与可齐设1
异或( ^ )
左移操作(<<)
网友评论