Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

樵夫2021-08-20 10:53

Java定义的位运算(bitwiseoperators)直接对整数类型的位进行操作,这些整数类型包括long,int,short,char和byte。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。  

Java语言中的位运算符分为位逻辑运算符和位移运算符两类,下面详细介绍每类包含的运算符。  

位逻辑运算符  

位逻辑运算符包含4个:&(与)、|(或)、~(非)和^(异或)。除了~(即位取反)为单目运算符外,其余都为双目运算符。表1中列出了它们的基本用法。  

表1位逻辑运算符  

 
运算符 含义 实例 结果
& 按位进行与运算(AND) 4 & 5 4
| 按位进行或运算(OR) 4 | 5 5
^ 按位进行异或运算(XOR) 4 ^ 5 1
~ 按位进行取反运算(NOT) ~ 4 -5

位与运算符  

位与运算符为&,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为1,那么计算结果才为1,否则为0。因此,任何数与0进行按位与运算,其结果都为0。  

例如下面的表达式:  

100&0

100&0

图所示为这个运算过程,结果为0。  Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

下面是两个非零的数字进行位与运算的过程。  

int x = 5,y = 12; // 创建整型变量保存两个数
int z = x&y; // 对这两个数进行位与运算,结果保存到z

这两行语句执行后变量Z的值是4,图所示为这个运算过程。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

位或运算符  

位或运算符为|,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为1,那么结果就为1;如果对应的二进制位都为0,结果才为0。  

下面是一个使用位或运算符的表达式。  

11|7

运算结果为15,图3所示为其运算过程。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

位异或运算符  

位异或运算符为^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为0或同时为1)时,结果为0;如果对应的二进制位不相同,结果则为1。  

下面是一个使用位异或运算符的表达式。  

11^7  

运算结果为12,图所示为其运算过程。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

提示:在有的高级语言中,将运算符^作为求幂运算符,要注意区分。  

位取反运算符  

位取反运算符为~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的1改为0,0改为1。  

下面是一个使用位取反运算符的表达式。  

~10

运算结果为65525,图5所示为其运算过程。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

我们可以使用如下的程序来检查这个运算结果。  

int i = 10;
System.out.printf("%d \n",~i);

编译执行以上程序,会发现输出的结果是-11,而不是65525。这是因为取反之后的结果是十六进制数,而在上面的程序中使用%d将输出转换为了十进制数。  

可以使用如下语句查看十六进制结果。  

int i=10;
System.out.printf("%x \n",~i);

可以看到输出结果为fff5,将它转换为二进制是1111111111110101。这个二进制数的最高位为1,表示这个数为负数。除最高位外,按位取反再加1,即得到二进制原码1000000000001011,用十进制数表示即为-11。  

注意:位运算符的操作数只能是整型或者字符型数据以及它们的变体,不用于float、double或者long等复杂的数据类型。  

位移运算符  

位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。表2列出了Java语言中的两个位移运算符,它们都属于双目运算符。  

运算符 含义 实例 结果
» 右移位运算符 8»1 4
« 左移位运算符 9«2 36

左位移运算符  

左移位运算符为«,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。  

例如,将整数11向左位移1位的过程如图所示。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

从上图中可以看到,原来数的所有二进制位都向左移动1位。原来位于左边的最高位0被移出舍弃,再向尾部追加0补位。最终到的结果是22,相当于原来数的2倍。  

右位移运算符  

右位移运算符为»,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。  

例如,将整数11向右位移1位的过程如图所示。  

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

从上图中可以看到,原来数的所有二进制位都向右移动1位。原来位于右边的最低位1被移出舍弃,再向最高位追加0补位。最终到的结果是5,相当于原数整除2的结果。  

复合位赋值运算符  

所有的二进制位运算符都有一种将赋值与位运算组合在一起的简写形式。复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。表3列出了组合后的复合位赋值运算符。  

表3复合位赋值运算符  

 
运算符 含义 实例 结果
&= 按位与赋值 num1 &= num2 等价于 num 1=num 1 & num2
|= 按位或赋值 num1 |= num2 等价于 num 1=num 1 | num2
^= 按位异或赋值 num1 ^= num2 等价于 num 1=num 1 ^ num2
-= 按位取反赋值 num1 ~= num2 等价于 num 1=num 1 ~ num2
«= 按位左移赋值 num1 «= num2 等价于 num 1=num 1 « num2
»= 按位右移赋值 num1 »= num2 等价于 num 1=num 1 » num2

下面的程序定义了几个int型变量,然后运用位赋值简写的形式将运算后的值赋给相应的变量:  

int a = 1;
int b = 2;
int c = 3;
a &= 4;
a |= 4;
a ^= c;
a -= 6;
b >>= 1;
c <<= 1;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);

该程序的输出为:  

a = 1
b = 1
c = 6

以上就是小编为大家整理发布的“Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符”一文,更多相关内容尽在开课吧Java教程频道。

Java位运算符:Java移位运算符、复合位赋值运算符及位逻辑运算符

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享