1
#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。谁能解释它是如何工作的?

4

1 回答 1

3

在这份声明中

 c = a || b; // 0011 1101

||如果任一操作数不等于 0,则使用逻辑 OR 运算符产生 1。

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

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

按位包含 OR 运算符|的写法如下

 c = a | b; // 0011 1101

如果你会这样写

 c = a | | b;

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

当然,如果你会写例如

c = a + + b;

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

您不应将逻辑运算符||&&位运算符|&.

于 2020-06-01T23:03:08.740 回答