C语言 如果在两个数字之间使用两次按位 OR 运算符.这将如何运作?


#include <stdio.h>
int main()
{
int a = 60; // 0011 1100
int b = 13; // 0000 1101
int c = 0;
c = a || b;
printf("%d",c);
return 0;
}

我的代码的输出是 1。谁能解释一下这是如何工作的?

在此语句中

c = a || b; // 0011 1101

使用了逻辑 OR 运算符||,如果其中一个操作数不等于 0,则生成 1。

来自 C 标准(6.5.14 逻辑 OR 运算符(

3 如果 || 运算符的任一操作数比较,则其应生成 1 不等于 0;否则,它产生 0。结果的类型为 int。

按位包含 OR 运算符|的编写方式如下

c = a | b; // 0011 1101

如果你会写成

c = a | | b;

符号之间'|'空格,则编译器将发出错误。您不能以这种方式使用任何二元运算符,因为此类运算符期望运算符的左侧和右侧都有操作数。

当然,如果你会写例如

c = a + + b;

然后是第一个运算符+是二进制加号,第二个运算符+是一元加号运算符。也就是说,没有两个连续的二进制运算符+

不应将逻辑运算符||&&与按位运算符|&混合使用。

最新更新