转自:
下文笔者将讲述java中位运算符,如下所示:
位运算符用于对整型类型(
long,int,short,char,and byte
)进行相关位运算操作,如下所示:
-------------------------------------------
&:按位与,“只有两个都是1,结果才是1”
|:按位或,“只要有一个1,结果就是1”
^:按位异或,“相同的为0,不同的为1”(通常被称之为 无进位相加)
~:按位取反,“1就是0,0就是1”
<<:按位左移,“表示将二进制向左位移,右边填0”
>>:按位右移,“表示将二进制向右位移,左边填符号位”
>>>:无符号右移动,“表示将二进制向右位移,左边填0”
按位与运算
按位与运算符"&"是双目运算符
其功能:对运算的两个数字,按位相与
两个位都相同时,则此位为1
两位不同时,则此位为0
例:
int a = 0b1011; int b = 0b1010; int c = a & b;//1010 System.out.println("c is " + c); ----运行以上代码,将输出以下信息--- c is 10
按位或运算
按位或运算符“|”是双目运算符
其功能:对运算的两个数字,按位相或
两个位中有一个位上的为1,则运算结果为1
否则为0
例
int a = 0b1011; int b = 0b1010; int c = a & b;//1011(11) System.out.println("c is " + c); ----运行以上代码,将输出以下信息--- c is 11
按位异或运算
按位异或运算符“^”是双目运算符
其功能:对运算的两个数字,按位异或
两个位中的值相同时,则返回0
否则为1
例
int a = 0b1011; int b = 0b1010; int c = a ^ b;//0001(1) System.out.println("c is " + c); ----运行以上代码,将输出以下信息--- c is 1
求反运算
求反运算符"~"是一个单目运算符,具有右结合性
求反运算符的功能:对计算数按位依次求反(此位上1变0,0变1,符号位也会求反)
左移运算
左移运算符“<<”是双目运算符
左移运算符的功能把“<<”:将左边的运算数全部向左移动指定位数,空出的位数补零,高位扔掉
如:
int a = 0b0011;// 3 int c = a << 3;// 11000(24) System.out.println("c is " + c); -----运行以上代码--- c is 24
右移运算
右移运算符“>>”是双目运算符
其功能是把“>>”:将左边的运算数的各二进位全部右移若干位
“>>”右边的数指定移动的位数
int a = 0b0011;// 3 int c = a >> 1;// 0001(1) System.out.println("c is " + c); -----运行以上代码--- c is 1
位运算注意事项:
1.移位运算符适用类型有byte、short、char、int、long
2.对低于int型的操作数将先自动转换为int型再移位
3.对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数,因为超过32位的移动毫无意义
4.对于long型整数移位时a>>b,则是先将移位位数b对64取模
5.x>>1的结果和x/2的结果是一样的(n除以2,可以使用n>>1),x<<2和x*4的结果也是一样的,即:一个数左移n位,效果等同于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方