什么'!((n % 5 != 0) ||(n % 20 == 0))'变身?为什么呢?我似乎不明白

What does `!((n % 5 != 0) || (n % 20 == 0))` trasnform into? and why? I don't seem to get it

本文关键字:明白 变身 什么 为什么呢      更新时间:2023-10-16

Title.我需要知道!((n % 5 != 0) || (n % 20 == 0))会变成什么以及为什么。我说转换是因为它一开始就有!

我尝试将其转换为((n%5==0) || (n%20==0))但我很确定这不是正确的答案。

谢谢!!

否定比看起来更难。

如果 A 和 B 中至少有一个为真,则"A 或 B"为真。

因此,如果 A 和 B 都不为真,它的否定"不是(A 或 B("必须是真的,这与 A 和 B 都是假

的相同。也就是说,否定等价于"(不是A(和(不是B("。

这导致你!(n % 5 != 0) && !(n % 20 == 0),或(n % 5 == 0) && (n % 20 != 0).

这是德摩根定律之一,你可以记住,但它们不是为了自己"发现"而来的,你只需要记住"反转"运算和操作数。

假设你的意思是使用德摩根定律,你可以通过将 NOT 分配到表达式中,方法是 NOT 每个表达式并将 OR 翻转到 AND(反之亦然(。

所以

!((n % 5 != 0) || (n % 20 == 0))

可以成为

(!(n % 5 != 0) && !(n % 20 == 0))

哪个可以成为

((n % 5 == 0) && (n % 20 != 0))

原文:!((n % 5 != 0) || (n % 20 == 0))

应用德摩根定律:(!(n % 5 != 0) && !(n % 20 == 0))

让它更清楚(假设n类似于int并且运算符没有过载(:
((n % 5 == 0) && (n % 20 != 0))

现在你有结果了。