2.2.8 按位逻辑表达式、逻辑表达式
按位逻辑表达式
Section titled “按位逻辑表达式”按位逻辑表达式有三种:按位与、按位或和按位异或。
按位与表达式 & 相等表达式相等表达式
按位异或表达式 ^ 按位与表达式按位与表达式
按位或表达式 | 按位异或表达式按位异或表达式
按位逻辑表达式的计算
Section titled “按位逻辑表达式的计算”按位逻辑表达式的计算是将 &、^、| 左右两边的值按每一位(bit)分别进行逻辑运算的结果。
计算结果的第N位满足:
- 按位与:两个操作数的第N位都为1时,结果为1,否则为0。
- 按位或:两个操作数的第N位都为0时,结果为0,否则为1。
- 按位异或:两个操作数的第N位相同时,结果为0,否则为1。
例如:
42 & 24 // 值为 842 | 24 // 值为 5842 ^ 24 // 值为 5042 的二进制表示是 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逻辑表达式有两种:逻辑与和逻辑或。
逻辑与表达式 && 按位或表达式按位或表达式
逻辑或表达式 || 逻辑与表达式逻辑与表达式
逻辑表达式的计算
Section titled “逻辑表达式的计算”逻辑表达式的计算是将 &&、|| 左右两边的值按照逻辑运算的结果。这会将左右两边的值转换为 bool 类型,然后进行逻辑运算。
其中:
- 逻辑与的结果是两个值都为
true时结果为true,否则为false。 - 逻辑或的结果是两个值都为
false时结果为false,否则为true。
例如:
true && false // 值为 falsetrue || false // 值为 true注意,逻辑表达式是短路的。例如:
false && a这个表达式的值一定是 false,因为逻辑与的左边是 false。此时,C++规定不会计算右边a的值,直接返回 false。类似的,如:
true || a这个表达式的值一定是 true,因为逻辑或的左边是 true。此时,C++规定不会计算右边a的值,直接返回 true。
在之后,当我们了解到表达式的副作用时,我们会进一步讨论逻辑表达式的短路。