C-逻辑复合运算符
复合运算符“&=”是逻辑运算符还是按位AND 换句话说,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//>。但是,这些都没有显示出&的短路行为。它是按位
a&=b
是否与以下内容相同:
a = a + 5;
a=a&b
a=a&b
a&=b
正在使用按位AND运算符。想象一下+=
操作:
a += 5;
同:
a = a + 5;
它只是两个操作的组合:
&
和=
在C中,a&=b
是a=a&b
,即按位。在C++中,有一个专用的&
的短路行为。它是按位和
简单的
当你做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++
)。是的——尽管成人学习理论认为通过实验学习具有重要作用。在这种情况下,按照您的建议,阅读标准似乎是最谨慎的。