問:Ipv4地址可以轉(zhuǎn)為整數(shù)類型的數(shù)字岔帽?
思路:ip地址分為四段管挟,每段都是 0~255 之間的數(shù)占锯,每段可以用 8 位來裝下它塌计,即4x8=32
ip字符串轉(zhuǎn)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;
//結(jié)果保留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位轉(zhuǎn)換為ip字符串:
//int 位轉(zhuǎn)換為 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
涉及知識點
數(shù)據(jù) | 字節(jié) | 標題3 |
---|---|---|
int | 4位字節(jié) | 1字節(jié)=8比特 4*8=32比特 |
---------------------- | ------------- | ----------------- |
我們來理解下十進制到二進制的轉(zhuǎn)換
十進制 | 二進制 | 十進制 | 二進制 |
---|---|---|---|
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 |
位與( & )
運算規(guī)則:0&0=0; 0&1=0; 1&0=0; 1&1=1;
與0相與可清零
與1相與可保留原值
取一個數(shù)中指定位,如取A的低4位
e.g.
A=10101110
A & 0000 1111 = 0000 1110
位或( | )
運算規(guī)則:0|0=0伊脓; 0|1=1府寒; 1|0=1; 1|1=1丽旅;
與0相或可保留原值
與1相與可齊設1
異或( ^ )
左移操作(<<)