不清楚OR NOT语法

时间:2014-12-09 15:04:53

标签: c

非常基本的问题(我是C中的总菜鸟)。

我写了一段代码:

if(!_a[_item[i]] || _b[_item[i]])

这是否意味着在以下情况下应运行下一行:

  • item [i] 不存在于a或b

或者是否意味着它应该在以下情况下运行:

  • item [i] 不存在存在于b

由于

5 个答案:

答案 0 :(得分:2)

这意味着item[i]中不存在ab中存在{{1}}

答案 1 :(得分:2)

所以,我们总是可以查看operator precedence tables,但我通常会遇到一些问题。所以让我们写一些代码:

#include <stdbool.h>
#include <stdio.h>

int main() {
    printf("%d\n", (!true || true)); // Outputs 1 (true)
}

所以,让我们看看这两个变体中哪一个有意义:

  • 如果我们有((!true) || true),那么这是有道理的。
  • 如果我们有(!(true || true)),则此有意义。

因此,我们可以清楚地说这两个表达式是相同的:

(!_a[_item[i]] || _b[_item[i]])
((!_a[_item[i]]) || _b[_item[i]])

因此,我们知道如果_item[i]中不存在ab中存在{{1}},则下一行将会运行。

答案 2 :(得分:1)

虽然已经为这个问题选择了一个答案,但无论如何我都会报名。

代码

if(!_a[_item[i]] || _b[_item[i]])

确定_item[i]_a_b的存在(非)。它的作用是:

  

数组_item[i]的元素_a的数值为零或数值为   数组_item[i]的元素_b非零

是否映射到presence的概念是一个与if语句的处理方式无关的架构决策。

答案 3 :(得分:0)

!的优先级高于||。第一个词被否定,第二个词不是。它相当于( (!(_a[_item[i]])) || _b[_item[i]] )

答案 4 :(得分:0)

检查运算符优先级(例如,在Wikipedia上),您会发现在!之前评估||,因此表达式被解析为:

if((!_a[_item[i]]) || _b[_item[i]])

顺便说一句。如果你看到(!A || B)这在逻辑中被称为impliesA implies B == !A || B