按位和逻辑运算符()

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

有关使用按位运算符的更多示例,请参阅位操作