位运算规则
运算符号 | 运算符 | 含义 | 举例 |
---|---|---|---|
& | 与 | 如果对应位都是1,则结果为1,否则为0 | |
0&0=0 | |||
0&1=0 | |||
1&0=0 | |||
1&1=1 | |||
| | 或 | 对应位只要有一个为1,那么结果就是1,否则为0 | |
0|0=0 | |||
0|1=1 | |||
1|0=1 | |||
1|1=1 | |||
~ | 非 | 如果位为0,结果是1;如果位为1,结果是0 | |
~0=1 | |||
~1=0 | |||
^ | 异或 | 如果对应位相同,则结果为0,否则为1 | |
0^0=0 | |||
0^1=1 | |||
1^0=1 | |||
1^1=0 | |||
<< | 左移 | 左操作数按位左移右操作数指定的位数 | |
0<<1=0 | |||
1<<1=2 | |||
>> | 右移 | 左操作数按位右移右操作数指定的位数 | |
0>>1=0 | |||
1>>1=0 |
位运算举例
1、2的倍乘或倍除
int int128 = 128;
int int156 = int128 << 2;
int int32 = int128 >> 2;
2、数值交换
b = a^b;
a = a^b;
b = a^b;
3、IP形式转换
public static int ipv4String2Int(String ipv4) {
String[] ips = ipv4.split("\\.");
int ip1 = Integer.parseInt(ips[0]) << 24;
int ip2 = Integer.parseInt(ips[1]) << 16;
int ip3 = Integer.parseInt(ips[2]) << 8;
int ip4 = Integer.parseInt(ips[3]);
return ip1 | ip2 | ip3 | ip4;
}
public static String ipv4Int2String(int ipv4) {
int ip1 = ipv4 >>> 24;
int ip2 = ipv4 << 8 >>> 24;
int ip3 = ipv4 << 16 >>> 24;
int ip4 = ipv4 << 24 >>> 24;
return ip1 + "." + ip2 + "." + ip3 + "." + ip4;
}