C-逻辑复合运算符

C-逻辑复合运算符,c,bit-manipulation,compound-operator,C,Bit Manipulation,Compound Operator,复合运算符“&=”是逻辑运算符还是按位AND 换句话说,a&=b是否与以下内容相同: a = a + 5; a=a&b a=a&b 是按位AND,而不是逻辑AND。(必须添加一些字符)a&=b正在使用按位AND运算符。想象一下+=操作: a += 5; 同: a = a + 5; 它只是两个操作的组合:&和= 在C中,a&=b是a=a&b,即按位。在C++中,有一个专用的 >类型,代码>和= />代码是布尔型的,就像是简单的和 布尔O//>。但是,这些都没有显示出&的短路行为。它是按位

复合运算符“&=”是逻辑运算符还是按位AND

换句话说,
a&=b
是否与以下内容相同:

a = a + 5;
  • a=a&b
  • a=a&b

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

a&=b
正在使用按位AND运算符。想象一下
+=
操作:

a += 5;
同:

a = a + 5;

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

在C中,
a&=b
a=a&b
,即按位。在C++中,有一个专用的 <代码> >类型,代码>和= />代码是布尔型的,就像是简单的<代码>和<代码> <代码>布尔O//>。但是,这些都没有显示出
&
的短路行为。

它是
按位和
简单的

当你做
a&=b
时,它的意思是
a=a&b

记住
a
b
应该是
整数类型
或升级为整数类型


&&
逻辑和

这是可以通过实验而不是询问来解决的问题之一:

#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);
}

到控制台。

为什么不运行一个示例并亲自查看-1有足够的理由(+1评论上述内容),但他可能没有准备好的构建环境。这对我来说似乎是一个公平的问题。好吧,但我们有,举几个例子。@Axim我当时不在家,无法使用有环境的计算机。学校的电脑,你知道。。。我现在试过了,看起来像&,但它很奇怪,因为当我用谷歌搜索它时,它说bitwise@effeffe-我的观点是,
&=
+=
是两个组合在一起的操作,那么为什么OP认为
&
应该结束
=&
,然后
+=
会结束
++
,因为没有二进制运算符
++
,而
&
&
都存在并且都是二进制运算符。实际上,最好通过查阅权威的C参考手册或检查。有些时候,实验是错误的方法(例如,任何调用未定义行为的行为,如
i=i++
)。是的——尽管成人学习理论认为通过实验学习具有重要作用。在这种情况下,按照您的建议,阅读标准似乎是最谨慎的。