C - 逻辑复合运算符



复合运算符 '&=' 是逻辑的还是按位的 AND ?

换句话说,a &= b是否与:

  • a = a & b
  • a = a && b

a &= b使用的是按位 AND 运算符。考虑一下+=操作:

a += 5;

与以下相同:

a = a + 5;

它只是两个操作的组合:&=

它是按位的 AND,而不是逻辑的。(必须添加一些字符)

在 C 中,a &= ba = a & b的,即按位。在C++中,有一个专用的bool类型,布尔值上的&=也是布尔值,bool上的简单&也是布尔值。不过,这些都没有表现出&&的短路行为。

bitwise AND很简单

当你这样做a&=b时,这意味着a=a&b

请记住abintegral 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

到控制台。

最新更新