From 7e14c42c64f115b0db4b994fd6a1aaafee41d273 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 31 Mar 2019 18:12:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8C=89=E4=BD=8D=E8=BF=90?= =?UTF-8?q?=E7=AE=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/book/04-Operators.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/book/04-Operators.md b/docs/book/04-Operators.md index 8247c50..d6fa1dd 100644 --- a/docs/book/04-Operators.md +++ b/docs/book/04-Operators.md @@ -645,6 +645,17 @@ float f4 = 1e-47f; //10 的幂数 ## 按位运算符 +按位运算符允许我们操作一个整数基本类型中的单个“比特”位,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。 + +按位运算来源自 C 语言的底层操作。我们经常要直接操纵硬件,频繁设置硬件寄存器内的二进制位。Java 的设计初衷是电视机顶盒嵌入式开发,所以这种底层的操作被仍被保留了下来。然而,随着操作系统的进步,现今已没必要过于频繁地进行按位运算了。 + +若两个输入位都是 1,则按位“与运算符” `&` 在输出位里生成一个 1 ;否则生成 0。若两个输入位里至少有一个是 1,则按位“或运算符” `|` 在输出位里生成一个 1;只有在两个输入位都是 0 的情况下,它才会生成一个 0。若两个输入位的某一个是 1,但不全都是 1,那么按位“异或运算符” `^` 才会在输出位里生成一个 1。按位“非运算符” `~` 属于一元运算符;它只对一个自变量进行操作(其他所有运算符都是二元运算符)。按位非运算生成与输入位的相反的值。例如,若输入 0,则输出 1;输入 1,则输出 0。 + +按位运算符和逻辑运算符都使用了同样的字符,只不过数量不同。“按位”短“移位”长。按位运算符可与等号 `=` 联合使用以接收结果及赋值:`&=`,`|=` 和 `^=` 都是合法的(由于 `~` 是一元运算符,所以不可与 `=` 联合使用)。 + +我们将 **Boolean** 类型被视为“单位值”(*one-bit value*)对待,所以它多少有些独特的地方。我们可以执行按位“与”、“或”、“异或”,但不能执行按位“非”(大概是为了避免与逻辑“非”混淆)。对于布尔值,按位运算符具有与逻辑运算符相同的效果,只是它们不会中途“短路”。此外,针对布尔值进行的按位运算为我们新增了一个“异或”逻辑运算符,它并未包括在“逻辑”运算符的列表中。在移位表达式中,禁止使用布尔运算,原因将在下面解释。 + + ## 移位运算符