按位操作符 用来操作整数基本数据类型中的单个 bit ,对两个参数中对应的位执行布尔代数计算,最终生成一个结果
1. 二元操作符
如果两个输入位都是1, 则按位 与 操作符& 生成一个输出位1, 否则生成一个输出位0,
如果两个输入位有一个是1, 则按位 或 操作符 | 生成一个输出位1, 只有两个输入位都是0时, 才会生成一个输出位0.
如果 输入位的某一个是1, 但不全者是1,那位按位 异或 操作^ 生成一个输出位1,
2. 一元操作符
按位 非 操作 ~也称为取反操作符,它只对一个操作数进行操作, 若输入0, 则输出1, 若输入1, 则输出0.
3. 按位操作符可与等号= 联合使用, 以便合并计算和赋值: &=, |=, ^= 都是合法的, 由于~ 是一元运算符,所以不可与 = 联合使用.
4. 将布尔类型 作为一种单比特值对待,有些独特。可以对它执行近按位 与, 或,异或运算,但不能执行按位 非(为了避免与逻辑 非混淆)
对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是它们不会中途 “短路”。 针对布尔值进行的按位运算为我们新增了一个 异或 逻辑操作符,它并未包括在 逻辑操作的列表中,
在移位表达式中,不能使用布尔运算,原因在 下一篇博客 解释
看一个示例:
public class Anweicaozuo {
public static void main(String[] args) {
int i = 0x10101010;
int j = 0x01010101;
int m = i^j;
int n = i&j;
int k = i|j;
int l = ~i;
int p = ~j;
System.out.println("按位与 操作结果" + n +" 二进制值" +Integer.toBinaryString(n));
System.out.println("按位或 操作结果" + k +" 二进制值" +Integer.toBinaryString(k));
System.out.println("按位异或 操作结果" + m +" 二进制值" +Integer.toBinaryString(m));
System.out.println("按位非 操作结果 l" + l +" p"+p +"\n二进制值l "
+Integer.toBinaryString(l) +" 二进制值p " + Integer.toBinaryString(p));
}
}