Java基础 —— 位运算符详解

在Java中,我们通常会使用算数运算符 +、 -、 * 、/ 来进行加、减、乘、除运算;也会用到数学函数,例如:Math.sqrt(5),Math.pow(3,2) 等,当然也会用到 自增(a++,++a)、自减(a--,--a)运算符。今天介绍的是用的比较少的位运算符。

通常我们说的位运算符指的是以下几种:&("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的结果呢?如下图:

Java基础 —— 位运算符详解

另外,当 & 和 | 应用在布尔值上时,将会得到一个布尔值。这与 && 和 || 运算符有点类似,不同的是 && 和 || 是采用“短路” 方式来求值,而位运算符不是。

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") -- 非运算符

非运算符可以理解为 按位取反。如下图:

Java基础 —— 位运算符详解

4、<< 、 >> 和 >>>

注意:移位运算符需要完成模32位的运算(int为32,long为64)

<<:左移运算符,将模式位左移,低位补0;

>>:右移运算符,将模式为右移,有符号;

>>>:右移运算符,将模式位右移,无符号(高位补0);注意:没有 <<<;

Java基础 —— 位运算符详解

移位运算符总结:

1、a>>n = a 除以 2的n次方;

2、a<<n = a 乘以 2的n次方;

3、a>>>n:

        当a为正整数时,= a>>n

        当a为负整数时,需要谨记最高位补0,int型是32位,long型是64位

 

以上为个人学习总结,如有问题欢迎留言讨论。