按位和逻辑运算符()
Java 语言提供了 4 个对整数或布尔操作数执行按位或逻辑运算的运算符。
- 补码(
~
)运算符是一元运算符,它执行一个操作数的位的按位或逻辑反转; 见 JLS 15.15.5。 。 - AND(
&
)运算符是一个二进制运算符,它执行两个操作数的按位或逻辑和; 见 JLS 15.22.2。 。 - OR(
|
)运算符是二进制运算符,它执行两个操作数的按位或逻辑包含或逻辑; 见 JLS 15.22.2。 。 - XOR(
^
)运算符是二进制运算符,它执行两个操作数的按位或逻辑异或; 见 JLS 15.22.2。 。
当操作数为布尔值时,这些运算符执行的逻辑运算可归纳如下:
| 一个 | B | 〜一 | A&B | A | B | A ^ B |
| – | - | – | — | —– | —– |
| 0
| 0 | 1 | 0 | 0 | 0 |
| 0
| 1 | 1 | 0 | 1 | 1 |
| 1
| 0 | 0 | 0 | 1 | 1 |
| 1
| 1 | 0 | 1 | 1 | 0 |
请注意,对于整数操作数,上表描述了各个位的情况。运算符实际上并行操作所有 32 或 64 位操作数或操作数。
操作数类型和结果类型
当操作数是整数时,通常的算术转换适用。按位运算符的常见用例
~
运算符用于反转布尔值,或更改整数操作数中的所有位。
&
运算符用于屏蔽整数操作数中的一些位。例如:
int word = 0b00101010;
int mask = 0b00000011; // Mask for masking out all but the bottom
// two bits of a word
int lowBits = word & mask; // -> 0b00000010
int highBits = word & ~mask; // -> 0b00101000
|
运算符用于组合两个操作数的真值。例如:
int word2 = 0b01011111;
// Combine the bottom 2 bits of word1 with the top 30 bits of word2
int combined = (word & mask) | (word2 & ~mask); // -> 0b01011110
^
运算符用于切换或翻转位:
int word3 = 0b00101010;
int word4 = word3 ^ mask; // -> 0b00101001
有关使用按位运算符的更多示例,请参阅位操作