# 按位和位移运算符

> 原文： [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)

Java 编程语言还提供对整数类型执行按位和位移操作的运算符。本节中讨论的运算符不太常用。因此，他们的报道很简短;目的是让您意识到这些运算符的存在。

一元按位补码运算符“`~`”反转位模式;它可以应用于任何整数类型，使每个“0”为“1”，每个“1”为“0”。例如，`byte`包含 8 位;将此运算符应用于位模式为“00000000”的值会将其模式更改为“11111111”。

带符号的左移位运算符“`&lt;&lt;`”将位模式向左移位，带符号的右移运算符“`&gt;&gt;`”将位模式向右移位。位模式由左侧操作数给出，位置数由右侧操作数移位。无符号右移运算符“`&gt;&gt;&gt;`”将零移动到最左侧位置，而`"&gt;&gt;"`之后的最左侧位置取决于符号扩展。

按位`&`运算符执行按位 AND 运算。

按位`^`运算符执行按位异或运算。

按位`|`运算符执行按位包含 OR 运算。

以下程序 [`BitDemo`](examples/BitDemo.java) 使用按位 AND 运算符将数字“2”打印到标准输出。

```
class BitDemo {
    public static void main(String[] args) {
        int bitmask = 0x000F;
        int val = 0x2222;
        // prints "2"
        System.out.println(val & bitmask);
    }
}

```