运算符 | 含义 | 实例 | 结果 |
---|---|---|---|
& | 按位进行与运算(AND) | 4 & 5 | 4 |
| | 按位进行或运算(OR) | 4 | 5 | 5 |
^ | 按位进行异或运算(XOR) | 4 ^ 5 | 1 |
~ | 按位进行取反运算(NOT) | ~ 4 | -5 |
&
,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。100&0
图 1 100位与0的运算过程
int x = 5,y = 12; // 创建整型变量保存两个数 int z = x&y; // 对这两个数进行位与运算,结果保存到z
图 2 5位与12的运算过程
|
,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。11|7
图 3 11位或7的运算过程
^
,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。11^7
图 4 11位异或7的运算过程
^
作为求幂运算符,要注意区分。
~
,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。~10
图 5 对10位取反的运算过程
int i = 10; System.out.printf("%d \n",~i);
int i=10; System.out.printf("%x \n",~i);
运算符 | 含义 | 实例 | 结果 |
---|---|---|---|
» | 右移位运算符 | 8»1 | 4 |
« | 左移位运算符 | 9«2 | 36 |
«
,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
图 6 对11左移1位运算过程
»
,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。
图 7 对11右移1位运算过程
运算符 | 含义 | 实例 | 结果 |
---|---|---|---|
&= | 按位与赋值 | 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 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
本文链接:http://task.lmcjl.com/news/10071.html