【问题标题】:Why is `!!(a||!a)` always true?为什么 `!!(a||!a)` 总是正确的?
【发布时间】:2021-12-23 23:27:18
【问题描述】:

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

问题是

为什么这个表达式总是正确的?

!!(a||!a)

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

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

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

谁能给我解释一下?

感谢您的帮助!

【问题讨论】:

  • a || !a 始终为真,因为它要么是 true || false 要么是 false || true,然后是 !!true = !false = true

标签: boolean boolean-logic boolean-expression


【解决方案1】:

首先,!! expression 抵消:它与expression 相同,因为否定的否定是原始值。

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

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

【讨论】:

  • 值得指出的是,尽管!! 取消了,但它们被广泛用于不同语言的类型转换。
  • @PooyaEstakhri “不同的语言?”哪个?我只能想到 JavaScript。
  • @Nirvana 这不太常见,但在较小程度上,相同的成语在其他语言中使用。我在 C 代码、PHP (IIRC) 甚至 R 中都见过它。在所有这些语言中,它都是糟糕的代码。
  • @Nirvana 和 python 即使不是 python 中的运算符是not,而不是!
【解决方案2】:

如果 "a" 为 TRUE,则添加 "!a" 为 FALSE

知道atrue 并且!afalse! 表示否定;在这种情况下,否定真 ->

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

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

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


如果 "a" 为 FALSE 且 "!a" 为 TRUE

知道afalse 并且!atrue! 表示否定;在这种情况下,否定假 ->

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2022-12-07
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多