1. &("and") 与运算
int a = 0b1000; //0b1000是8的二进制表示 int b = 0b1011; //0b1011是11的二进制表示 int c = a & b; //对a和b做与位运算 System.out.println(c);//得到结果c为8,即0b1000
具体运算逻辑如下:只有两个操作数对应的位都为1的时候,&运算结果才为1,否则为0.
a 0b1000
b 0b1011
-----------
c 0b1000
2. |("or") 或运算
int a = 0b1000; //0b1000是8的二进制表示 int b = 0b1011; //0b1011是11的二进制表示 int c = a | b; //对a和b做或位运算 System.out.println(c);//得到结果c为11,即0b1011
具体运算逻辑如下:只要两个操作数对应的位有一个为1,|运算结果就为1,否则为0.
a 0b1000
b 0b1011
-----------
c 0b1011
3. ^("xor") 异或运算
int a = 0b1000; //0b1000是8的二进制表示 int b = 0b1011; //0b1011是11的二进制表示 int c = a ^ b; //对a和b做异或位运算 System.out.println(c);//得到结果c为3,即0b0011
具体运算逻辑如下:只要两个操作数对应的位相同,^运算结果就为0,否则为1.
a 0b1000
b 0b1011
-----------
c 0b0011
4. ~("not") 非运算
int a = 0b1000; //0b0000 1000是8的二进制表示 int c = ~a; //对a做非位运算 System.out.println(c);//得到结果c为-9,即0b1000 1001
具体运算逻辑如下: ~运算规则是按位取反,此时为补码.需转化为原码,即先按位取反,符号位除外,然后末位+1.
0b0000 1000先按位取反,得到如下.
0b1111 0111此时为补码.需转化为原码.
0b1000 1000先按位取反,符号位除外.
0b1000 1001末位加1.即-9.