位运算符主要是以二进制规则进行运算
使用规则:两个二进制操作数对应位同为1 结果位 才为1,其余情况为0;
例如:整数 a = 15 整数 b = 127
计算:(a & b)
15 的二进制位:0000 1111
127 的二进制为:0111 1111
即:(a & b) = 15
使用规则:两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0;
例如:整数 b = 127 整数 c = 128
计算:(b | c)
127 的二进制位:0111 1111
128 的二进制位:1000 0000
即:(b | c) = 255
使用规则:一个二进制操作数,对应位为0,结果位为1;对应位为1,结果位为0;
作用是将每位二进制取反
例如:整数 d = 1
计算:(~d)
十进制 1 的二进制表示为:
0000 0001
每位都取反为:
1111 1110
这是内存中的保存形式。我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式存储的。正数的补码和原码一样,负数的补码得到过程:原码 转 反码 再转 补码
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
传送门:原码, 反码, 补码 详解
然后计算取反后的补码,其真值就是结果。
即:(~d) = -2
使用规则:两个二进制操作数对应位相同为0,不同为1;
例如:整数 e = 2 整数 f= 3
计算:(e ^ f)
2 的二进制位:0000 0010
3 的二进制位:0000 0011
即:(e ^ f) = 1
public class bitwise {
public static void main(String[] args){
int a = 15;
int b = 127;
int c = 128;
int d = 1;
int e = 2;
int f = 3;
System.out.println("a和b的 与运算 结果为:" + (a & b));
System.out.println("b和c的 或运算 结果为:" + (b | c));
System.out.println("d 非运算 的结果为:" + (~d));
System.out.println("e和f 异或运算 的结果为: " + (e ^ f));
}
}
运算结果:
a和b的 与运算 结果为:15
b和c的 或运算 结果为:255
d 非运算 的结果为:-2
e和f 异或运算 的结果为: 1