非常基本的问题(我是C中的总菜鸟)。
我写了一段代码:
if(!_a[_item[i]] || _b[_item[i]])
这是否意味着在以下情况下应运行下一行:
或者是否意味着它应该在以下情况下运行:
由于
答案 0 :(得分:2)
这意味着item[i]
中不存在a
或b
中存在{{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]
中不存在a
或b
中存在{{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)这在逻辑中被称为implies
:A implies B == !A || B