Skip to content

Commit 7e14c42

Browse files
committed
更新按位运算符
1 parent 32cf26b commit 7e14c42

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

docs/book/04-Operators.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,17 @@ float f4 = 1e-47f; //10 的幂数
645645
## 按位运算符
646646

647647

648+
按位运算符允许我们操作一个整数基本类型中的单个“比特”位,即二进制位。按位运算符会对两个自变量中对应的位执行布尔代数,并最终生成一个结果。
649+
650+
按位运算来源自 C 语言的底层操作。我们经常要直接操纵硬件,频繁设置硬件寄存器内的二进制位。Java 的设计初衷是电视机顶盒嵌入式开发,所以这种底层的操作被仍被保留了下来。然而,随着操作系统的进步,现今已没必要过于频繁地进行按位运算了。
651+
652+
若两个输入位都是 1,则按位“与运算符” `&` 在输出位里生成一个 1 ;否则生成 0。若两个输入位里至少有一个是 1,则按位“或运算符” `|` 在输出位里生成一个 1;只有在两个输入位都是 0 的情况下,它才会生成一个 0。若两个输入位的某一个是 1,但不全都是 1,那么按位“异或运算符” `^` 才会在输出位里生成一个 1。按位“非运算符” `~` 属于一元运算符;它只对一个自变量进行操作(其他所有运算符都是二元运算符)。按位非运算生成与输入位的相反的值。例如,若输入 0,则输出 1;输入 1,则输出 0。
653+
654+
按位运算符和逻辑运算符都使用了同样的字符,只不过数量不同。“按位”短“移位”长。按位运算符可与等号 `=` 联合使用以接收结果及赋值:`&=``|=``^=` 都是合法的(由于 `~` 是一元运算符,所以不可与 `=` 联合使用)。
655+
656+
我们将 **Boolean** 类型被视为“单位值”(*one-bit value*)对待,所以它多少有些独特的地方。我们可以执行按位“与”、“或”、“异或”,但不能执行按位“非”(大概是为了避免与逻辑“非”混淆)。对于布尔值,按位运算符具有与逻辑运算符相同的效果,只是它们不会中途“短路”。此外,针对布尔值进行的按位运算为我们新增了一个“异或”逻辑运算符,它并未包括在“逻辑”运算符的列表中。在移位表达式中,禁止使用布尔运算,原因将在下面解释。
657+
658+
648659
<!-- Shift Operators -->
649660
## 移位运算符
650661

0 commit comments

Comments
 (0)