按位和逻辑运算符()
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
有关使用按位运算符的更多示例,请参阅位操作