在Java中,我们通常会使用运算符进行计算,比如算数运算符 +、 -、 * 、/ ;也会用到数学函数,例如:Math.sqrt(5),Math.pow(3,2) 等。今天介绍的是 位运算符。
通常我们说的位运算符指的是以下几种:&("and")、|("or")、^("xor")、~("not");还有移位运算符,包括 :<<、>>、>>>三种。注意:这些运算符都是按位模式进行处理,并且都只能对整型数值进行运算。接下来将一一进行介绍。
1、&("and") 和 |("or")
&:只有当两个位都是1时,才能得到1;
|:当两个位中的一位是1时,就能得到1;
例如:
int a = 100;
int b = 101;
System.out.println((a&b) + " " + (a|b)); // 100 101
上面为什么会得到 100 和 101的结果呢?如下图:
另外,当 & 和 | 应用在布尔值上时,将会得到一个布尔值。这与 && 和 || 运算符有点类似,不同的是 && 和 || 是采用“短路” 方式来求值,而位运算符不是。
boolean a = true;
boolean b = false;
System.out.println((a&b) + " " + (a|b)); // false true
2、^("xor") -- 异或运算符
当两个对应的位相同时得0,不同时才得1,所以按照上图二进制数,如果运算符是 ^ 时,得到的结果如下:
int a = 100;
int b = 101;
System.out.println((a^b)); // 1
3、~("not") -- 非运算符
非运算符可以理解为 按位取反。如下图:
4、<< 、 >> 和 >>>
注意:移位运算符需要完成模32位的运算(int为32,long为64)
<<:左移运算符,将模式位左移,低位补0;
>>:右移运算符,将模式为右移,有符号;
>>>:右移运算符,将模式位右移,无符号(高位补0);注意:没有 <<<;
移位运算符总结:
1、a>>n = a 除以 2的n次方;
2、a<<n = a 乘以 2的n次方;
3、a>>>n:
当a为正整数时,= a>>n
当a为负整数时,需要谨记最高位补0,int型是32位,long型是64位
以上为个人学习总结,如有问题欢迎留言讨论。