位运算符
位运算指的是对数字进行二进制按位的运算,数字在计算机中是按照二进制来表示的
1看成真,0看成假,联想逻辑运算的规则(1&0结果为0)
>>>>>> 右移运算符,右移1位相当于除2取商
<<<<<< 左移运算符,左移1位相当于乘2
^按位异或
∣|∣按位或
&按位与
~取反
注意:
&,|,^既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
int a=3;
int b=4;
System.out.println(a&b);
System.out.println(a|b);
System.out.println(a^b);
System.out.println(~a);//结果为-4
分析:
3表示为0011(11之前全是0)4表示为0100(1之前全是0)3和4按与操作结果为0,按或操作得到(0111,1之前全是0,值为7),按异或得到(0111,1之前全是0,值为7)注意异或(0∧0=0,0∧1=1,1∧1=0)。取反只能对一个操作数进行,需要掌握原码,反码,补码的概念(1变成0,0变成1,比如对3取反得到的是一个负数)。
左移和右移运算符:
左移运算符,左移1位相当于乘2:比如问32怎么做最快?做左移操作3<<1是3左移一位就相当于32,3*4就用3<<2,左移两位。
左移右移运算要比乘除运算快的多,遇到乘以或除以2的倍数完全可以采用左移右移操作
int b = 3<<2; //相当于:3*2*2;
int d = 12>>2; //相当于12/2/2;
System.out.println(12>>2);//结果为3