如果在两个数字之间使用了两次按位或运算符。那将如何运作?

If bitwise OR operator is used twice between two number. How will that work?

#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

使用逻辑或运算符 ||,如果其中一个操作数不等于 0,则返回 1。

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

3 The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

按位包含或运算符|写成

 c = a | b; // 0011 1101

如果你会这样写

 c = a | | b;

符号之间有空格 '|' 则编译器会报错。您不能以这种方式使用任何二元运算符,因为这样的运算符需要运算符的左侧和右侧的操作数。

当然,如果你会这样写,比如

c = a + + b;

那么就有第一个运算符+是二元加号,第二个运算符+是一元加号运算符。即没有两个连续的二元运算符+.

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