), so the expression is equivalent to:1
which is always true when n
, even if it's not a multiple of 2019.2019
A clearer expression would be:(a, b)
我的任务是找到一个逻辑表达式,其结果是
a>=n || b<=n && (n%3==0 && n%673==0)
若且仅若 n%2019==0
的倍数 &&
而不是来自于区间 ||
.
b<=n && (n%3==0 && n%673==0)
教材给出的答案如下,我不太明白。n<=a
我理解的是,在这两个旁观者之间的东西就相当于
(a>=n || b<=n) && (n%3==0 && n%673==0)
所以,这是好的。但我不明白为什么会这样,我的意思是... (a, b)
操作者的优先级高于 2019
操作符,那么我们岂不是要评估 &&
先,而且只有在最后 ||
? 我想,如果我要做的话,我会这样做。
优先于
bool expr(int n, int a, int b)
{
return a>=n || b<=n && (n%3==0 && n%673==0);
}
expr(1000, 2000, 2018)
,所以我们多加一组副词?还能用吗?还是我错了?true
我的任务是找到一个逻辑表达式,如果且仅当一个给定的数字n是2019的倍数且不是来自区间(a,b)时,这个表达式将导致1。教材给出的答案如下......。试了一下,发现写的表达式没有多余的括号是不行的。
a>=n || (b<=n && (n%3==0 && n%673==0))
例如,评价为 n <= a
,尽管它不是2019年的倍数。
正如你所指出的,逻辑AND运算符&&比逻辑OR运算符具有更高的优先性。