复合运算符 '&=' 是逻辑的还是按位的 AND ?
换句话说,a &= b
是否与:
-
a = a & b
-
a = a && b
a &= b
使用的是按位 AND 运算符。考虑一下+=
操作:
a += 5;
与以下相同:
a = a + 5;
它只是两个操作的组合:&
和=
。
它是按位的 AND,而不是逻辑的。(必须添加一些字符)
在 C 中,a &= b
是a = a & b
的,即按位。在C++中,有一个专用的bool
类型,布尔值上的&=
也是布尔值,bool
上的简单&
也是布尔值。不过,这些都没有表现出&&
的短路行为。
bitwise AND
很简单
当你这样做a&=b
时,这意味着a=a&b
请记住a
,b
应integral type
或提升为整数类型
虽然&&
logical AND
.
这是可以通过实验而不是询问来解决的查询之一:
#include <stdio.h>
#include <inttypes.h>
int main(int argc, char *argv[]) {
uint8_t a = 0xFF;
uint8_t b = 0x0F;
a &= b;
printf("a &= b : %02Xn",a);
a = 0xFF;
printf("a & b : %02Xn", a & b);
printf("a && b: %02Xn", a && b);
}
指纹:
a &= b : 0F
a & b : 0F
a && b: 01
到控制台。