如果"n"是"2019"的倍数并且不在区间"(a,b)"中,



我的任务是找到一个逻辑表达式,当且仅当给定的数字n2019的倍数并且不是来自区间(a, b)时,该表达式才会导致1

教科书给出了以下答案,我不太明白:

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,即使它不是2019年的倍数。

正如你所指出的,逻辑 AND 运算符 && 的优先级高于逻辑 OR 运算符 ||(引用(,因此表达式等效于:

a>=n || (b<=n && (n%3==0 && n%673==0))

n <= a时总是如此,即使它不是 2019 年的倍数。

更清晰的表达方式是:

(n % 2019 == 0) && (n <= a || n >= b)

相关内容

  • 没有找到相关文章

最新更新