Java教程 - Java按位运算符
按位操作符作用于其操作数的各个位。Java按位运算符可以应用于整数types: long,int,short,char,byte
。
按位运算符列表
下表列出了所有Java按位运算符。
运算符 | 结果 |
---|---|
~ | 按位一元NOT |
& | 按位AND |
| | 按位或 |
^ | 按位异或 |
>> | 向右移动 |
>>> | 右移零填充 |
<< | 向左移动 |
&= | 按位AND分配 |
|= | 按位OR分配 |
^= | 按位异OR分配 |
>>= | 右移赋值 |
>>>= | 右移零填充分配 |
<<= | 向左移位 |
按位运算符分配将赋值与按位运算组合。以下两个语句是等效的:
a = a >> 4; a >>= 4;
以下两个语句是等效的:
a = a | b; a |= b;
以下程序演示了按位运算符分配:
public class Main { public static void main(String args[]) { int a = 1; int b = 2; int c = 3; a |= 2; b >>= 2; c <<= 2; a ^= c; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } }
此程序的输出如下所示:
Java左移运算符
左移位算子,<<移位所有位中的一个值到左边一个指定的数字的时间。
它有这种一般形式:
value << num
以下代码移位字节类型变量。
public class Main { public static void main(String args[]) { byte a = 64, b; int i; i = a << 2; b = (byte) (a << 2); System.out.println("Original value of a: " + a); System.out.println("i and b: " + i + " " + b); } }
此程序生成的输出如下所示:
例子
每个左移具有使原始值加倍的效果。以下程序说明了这一点:
public class Main { public static void main(String args[]) { int num = 0xFFFFFFF; for (int i = 0; i < 4; i++) { num = num << 1; System.out.println(num); } } }
程序生成以下输出:
Java右移运算符
右移位运算符>>
将值中的所有位向右移a指定次数。
其一般形式如下所示:
value >> num
num
指定要向右移位的位置数。
以下代码段将值 32
向右移两个位置:
public class Main { public static void main(String[] argv) { int a = 32; a = a >> 2; System.out.println("a is " + a); } }
输出:
Java无符号右移
Java无符号,右移运算符,>>>
,始终将零转移到高阶位。
其一般形式如下所示:
value >>> num
num
指定要向右移位的位置数。
以下代码显示如何使用无符号右移。
public class Main { public static void main(String[] argv) { int a = -1; a = a >>> 24; System.out.println("a is " + a); } }
输出: