Java位运算符是指在Java中使用的位运算符,它们可以对整数和字节值执行位操作。它们可以用来检查一个数字的特定位是否被设置,或者将一个数字的特定位设置为1或0。
Java中有6个位运算符:&、|、^、~、<<和>>。
&(按位与)运算符用于将两个数字的二进制表示形式中的每一位都“与”起来。如果两个相应的二进制位都是1,那么最后得到的二进制位也是1;如果其中有一个二进制位是0,那么最后得到的二进制位就是0。例如:
int a = 60; // 60 = 0011 1100 int b = 13; // 13 = 0000 1101 int c = 0; c = a & b; // 12 = 0000 1100
| (按位或) 运算符用于将两个数字的二进制表示形式中的每一位都“或”起来。如果其中有一个相应的二进制位是1,那么最后得到的二进制位就是1;如果其中有一个相应的二进制位是0,那么最后得到的二进制位就是0。例如:
int a = 60; // 60 = 0011 1100 int b = 13; // 13 = 0000 1101 int c = 0; c=a | b; // 61= 0011 1101
^ (异或) 运算符用于将两个数字的二进制表示形式中的每一位都“异或”起来。如果其中有一个相应的二进制位不同(即一方是1而另一方是0或者另一方是1而另一方是0) ) ,那么最后得到的二进制位就是1. 否者就会得出0.例如:
int a=60;//60=0011 1100 int b=13;//13=0000 1101 int c=0; c=a^b;//49=0011 0001
~ (取反/补/变号/逆/非/NOT) 运算 符用来对单独一 个 整 数 做 取 反 操作 . 具 体 来 说 , 其把该 整 数 的 每 一 bit 都 翻 转 , 具 有 0 的 bit 变 成 1 , 有 1 的 bit 变 成 0 .例如:
int a=60 ;//60=0011 1100 int b=~a ;//-61=-0011 1101
<< (左 移 ) 运 算 符 , 顾 向已, 把该 整 数 的 bit 都 向已 移动 n(n≧ 0) bit .例如 : p > < pre > int a=60 ;//60=0011 1100 int b=a<<2 ;//240=1111 0000 pre > < p > >> (右 移 ) 运 算 符 , 顾 向右, 把该 整 数 的 bit 都 向右 移动 n(n≧ 0) bit .例如 : p > < pre > int a=-4 ;//-4=-0000 0100 int b=a>>2 ;//-1=-1111 1111 pre >
按位操作符作用于其操作数的各个位。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); } }
此程序的输出如下所示:
左移位算子,<<移位所有位中的一个值到左边一个指定的数字的时间。
它有这种一般形式:
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); } } }
程序生成以下输出:
右移位运算符>>
将值中的所有位向右移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无符号,右移运算符,>>>
,始终将零转移到高阶位。
其一般形式如下所示:
value >>> num
num
指定要向右移位的位置数。
以下代码显示如何使用无符号右移。
public class Main { public static void main(String[] argv) { int a = -1; a = a >>> 24; System.out.println("a is " + a); } }
输出:
Java集合教程 -Java列表列表是对象的有序集合,在 List 界面中定义。 List 接口表示集合框架中的列表。列表可以具有重复的元素。...
Java集合教程 -Java特殊类型映射已排序的映射分类映射按顺序保存映射条目。它基于键对映射条目进行排序从代码中的 Comparable 接...
JSF教程 -JSF 列表框多选以下代码显示了如何创建多个可选择选择框。h:selectManyListbox标记渲染HTML输入元素的类型“select与大...
JSF教程 -JSF表单密码示例h:inputSecret标签渲染类型为“password的HTML输入元素。以下JSF标记h:inputSecret value=password /被...
JSF教程 -JSF转换数字示例f:convertNumber标记用于将字符串值转换为所需格式的数字。以下代码显示如何使用f:convertNumber标记f:...