Skip to content

2.2.8 按位逻辑表达式、逻辑表达式

This content is not available in your language yet.

按位逻辑表达式有三种:按位与、按位或和按位异或。

  • 按位与表达式 & 相等表达式
  • 相等表达式
  • 按位异或表达式 ^ 按位与表达式
  • 按位与表达式
  • 按位或表达式 | 按位异或表达式
  • 按位异或表达式

按位逻辑表达式的计算是将 &、^、| 左右两边的值按每一位(bit)分别进行逻辑运算的结果。

计算结果的第N位满足:

  • 按位与:两个操作数的第N位都为1时,结果为1,否则为0。
  • 按位或:两个操作数的第N位都为0时,结果为0,否则为1。
  • 按位异或:两个操作数的第N位相同时,结果为0,否则为1。

例如:

42 & 24 // 值为 8
42 | 24 // 值为 58
42 ^ 24 // 值为 50

42 的二进制表示是 0000 0000 0000 0000 0000 0000 0010 1010,24 的二进制表示是 0000 0000 0000 0000 0000 0000 0001 1000,按位与的结果是 0000 0000 0000 0000 0000 0000 0000 1000,转换为十进制就是 8。

按位逻辑表达式会进行整数提升。例如:

true & 2 // 值为 2
'a' | 2 // 值为 99

逻辑表达式有两种:逻辑与和逻辑或。

  • 逻辑与表达式 && 按位或表达式
  • 按位或表达式
  • 逻辑或表达式 || 逻辑与表达式
  • 逻辑与表达式

逻辑表达式的计算是将 &&、|| 左右两边的值按照逻辑运算的结果。这会将左右两边的值转换为 bool 类型,然后进行逻辑运算。

其中:

  • 逻辑与的结果是两个值都为 true 时结果为 true,否则为 false。
  • 逻辑或的结果是两个值都为 false 时结果为 false,否则为 true。

例如:

true && false // 值为 false
true || false // 值为 true

注意,逻辑表达式是短路的。例如:

false && a

这个表达式的值一定是 false,因为逻辑与的左边是 false。此时,C++规定不会计算右边a的值,直接返回 false。类似的,如:

true || a

这个表达式的值一定是 true,因为逻辑或的左边是 true。此时,C++规定不会计算右边a的值,直接返回 true。

在之后,当我们了解到表达式的副作用时,我们会进一步讨论逻辑表达式的短路。