如果在两个数字之间两次使用按位OR运算符。它将如何工作?

问题描述 投票:0回答: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。谁能解释它是如何工作的?

c bitwise-operators bitwise-or
1个回答
2
投票

在此声明中

 c = a || b; // 0011 1101

使用了逻辑或运算符||,如果两个操作数中的任何一个都不等于0,则该运算符将产生1。

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

3 ||如果运算符之一比较,则运算符应产生1不等于0;否则,结果为0。结果的类型为int。

按位或运算符|的写法是

 c = a | b; // 0011 1101

如果您愿意这样写

 c = a | | b; // 0011 1101

符号'|'之间有空格,则编译器将发出错误。您不能对任何二进制运算符使用这种方式,因为这样的运算符期望运算符在运算符的左侧和右侧。

当然,如果您要写类似的例子

c = a + + b;

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

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

© www.soinside.com 2019 - 2024. All rights reserved.