复合运算符 '&=' 是逻辑 AND 还是按位 AND ?
换句话说,a &= b
等同于:
a = a & b
a = a && b
复合运算符 '&=' 是逻辑 AND 还是按位 AND ?
换句话说,a &= b
等同于:
a = a & b
a = a && b
这是按位与,而不是逻辑。(必须添加一些字符)
a &= b
正在使用按位 AND 运算符。想想+=
操作:
a += 5;
是相同的:
a = a + 5;
它只是两个操作的组合:&
和=
.
在 C 中,a &= b
是a = a & b
,即按位。在有专用bool
类型的 C++ 中,&=
on booleans 也是布尔型,简单&
的 on也是如此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 : %02X\n",a);
a = 0xFF;
printf("a & b : %02X\n", a & b);
printf("a && b: %02X\n", a && b);
}
印刷:
a &= b : 0F
a & b : 0F
a && b: 01
到控制台。