【问题标题】:If bitwise OR operator is used twice between two number. How will that work?如果按位或运算符在两个数字之间使用两次。这将如何运作?
【发布时间】:2020-09-20 08:18:13
【问题描述】:
#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 binary-operators bitwise-or logical-or


【解决方案1】:

在此声明中

 c = a || b; // 0011 1101

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

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

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

按位包含 OR 运算符| 写成这样

 c = a | b; // 0011 1101

如果你会这样写

 c = a | | b;

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

当然,如果你会写比如

c = a + + b;

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

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

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2016-02-22
    • 2011-05-26
    相关资源
    最近更新 更多