Day05位运算符
位运算符
//位运算符:& ,|,^,<<,>>
//位运算,与二进制有关
A=0011 1100
B=0000 1101
A&B=0000 1100 //按位与 (&),对于两个操作数的每一个对应位,如果两个位都是1,则结果位为1,否则为0
A|B=0011 1101 //按位或 (|),对于两个操作数的每一个对应位,如果两个位中有任意一个为1,则结果位为1,否则为0。
A^B=0011 0001 //按位异或 (^),对于两个操作数的每一个对应位,如果两个位不相同,则结果位为1,否则为0。
~B=1111 0010 //按位非 (~),单一操作数:对操作数的每一位进行取反,即0变为1,1变为0。
有趣的面试题:
如何最快的计算2*8的结果?
System.out.println(2<<3);
// <<:*2;
// >>:/2
//2<<3:2*(2^3)
/*
式子解析
0000 0000:0
0000 0001:1
0000 0010:2 -------------
0000 0011:3
0000 0100:4 --------------
0000 0101:5
0000 0110:6---------------
0000 0111:7
0000 1000:8--------------
......
0001 0000:16------------
二进制的1每向左移动一位,就相当于十进制的数乘二
2<<3:二进制的1向左移动3位,相当于十进制的数连乘3个2,也就是2^3
由于位运算符直接对二进制进行运算,所以运算最快