位运算
位运算在我们一般编写程序时, 不是特别常见,但是巧妙的使用位运算可以大量减少运行开销,优化算法 , 如下 :
我们先看 << >> >>>这三个使用方法
// << >> 为有符号的移动,最高位1
int a = 1 << 4; // 1 二进制 0001 -- 左移4位 1000
System.out.println("a:"+a); //十进制为16
int b = -16 >> 4; // a 二进制 1000 -- 右移4为 0001
System.out.println("b:"+b); //十进制为1
// >>> 为无符号右移,空缺位只用0 补
int c = 4 >>> 1; // 4 0000 0100
int d = -4 >>> 1; // -4 1111 1100
System.out.println("c:"+c);
System.out.println("d:"+d);
结果 :
d 的最高位因为是1 ,移位后补0 ,所以超出了 int 的最大值
接着是这四个 : & | ^ ~ , 例 :如下
int a = 4,b = 6; // a: 0000 0100 b: 0000 0110
//4&6 -- 0000 0100 -- 十进制:4
System.out.println(a & b);
//4|6 -- 0000 0110 -- 十进制:6
System.out.println(a | b);
//4^6 -- 0000 0010 -- 十进制:2
System.out.println(a ^ b);
//~4 -- 1111 1011 -- 十进制:-5
//~6 -- 1111 1001 -- 十进制:-7
System.out.println(~a);
System.out.println(~b);
结果 :