为什么 `!!(a||!a)` 总是正确的?

Why is `!!(a||!a)` always true?

我是一名 Java 菜鸟,在学校我们有一些家庭作业。我将解释布尔术语,但我不理解其中一个。

问题是

Why is this expression always true?

!!(a||!a)

括号里的部分我看懂了,但是前面的两个感叹号是什么意思?

如果第一个 a = true --> !a = not true --> !! (双重否定 = 真?)a = 真,第二个 !a = 不真 --> !!a = 真 --> !!!a = 不真

如果我是对的,为什么这个表达式总是正确的?这打败了我。

你们谁能给我解释一下吗?

感谢您的帮助!

首先,!! expression抵消:和expression一样,因为取反的取反就是原值

所以我们剩下 a || ! a,这是一个析取。因此,如果子表达式 a!a 中至少有一个为真,则结果为 true

最后,如果 a 为真,则 a 为真 (duh)。如果 a 为假,则 ! a 为真。因此,无论 a 的值如何,整个表达式都为真。

如果“a”为 TRUE 添加“!a”为 FALSE

知道 atrue!afalse! 是为了否定;在这种情况下,否定真 -> )

如果 a||!a 表示 truefalse,从该表达式中你得到 true...

你可以这样看: !!(true).

双重否定的结果是什么? 正确。 然后,true(true) = (aka a||!a),最终使你的表达式 !!(a||!a) always true.


如果“a”为假且“!a”为真

知道 afalse!atrue! 是为了否定;在这种情况下,否定假 -> )

如果 a||!a 表示 falsetrue,从该表达式中你得到 true...

你可以这样看: !!(true).

双重否定的结果是什么? 正确。 然后,true(true) = (aka a||!a),最终使你的表达式 !!(a||!a) always true.

!!(a||!a)

使用布尔代数的公理之一,双重否定可以抵消一切。

所以它相当于说 (a||!a)

假设,我们设置a = true;许多编程语言使用条件语句的惰性评估,条件语句将评估为真并执行 if 语句主体内的任何内容。

如果我们设置 a = false ,则条件语句的右侧变为真...因为 !aa == false, !a == true.[=15 的反义词=]