我对!a&&(a||b)
感到有些困惑。如果我直接看它并简单地解释它,它看起来好像和
!a&&a or !a&&b
但这似乎有点奇怪,因为a
不可能是真的和假的,只有后者是真的才会成真。我也像这样解释它
!a || a&&b
我真的不知道我是如何想出这个的,但它看起来更合乎逻辑,因为没有矛盾。有人可以帮我吗?
答案 0 :(得分:43)
| a | b | !a | a || b | !a && (a || b) | !a && b | [ !a && (a || b) ] <=> [!a && b] |
|---|---|----|--------|------------------|---------|-------------------------------------|
| 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 |
!a && (a || b)
相当于(!a && a) || (!a && b)
。(!a && a)
相当于false
全部放在一起:
!a && (a || b) <=> (!a && a) || (!a && b) <=> false || (!a && b) <=> !a && b
答案 1 :(得分:12)
您可以像(!a && b)
这样简化它,因为在表达式(!a && a || !a && b)
中,条件!a && a
始终为false
答案 2 :(得分:11)
In Java与大多数 1 语言一样,一元!
的优先级高于&&
。
所以!a&&(a||b)
是 (!a)&&(a||b)
您可以使用Karnaugh map:
表示该表达式的真值表 | a = 0 | a = 1 |
------+-------+-------+
b = 0 | 0 | 0 |
------+-------+-------+
b = 1 | 1 | 0 |
------+-------+-------+
现在,很容易看到唯一真实的情况是(!a) && b
。
所以!a&&(a||b)
是 !a && b
1 见下面的评论。
答案 3 :(得分:6)
它只是意味着!a && b
,必须是假的,b必须是真的,因为它是真的
答案 4 :(得分:3)
(!a && a) || (!a && b)
是对此的正确扩展(使用分配法)。
这可以简化为!a && b
。
布尔代数的分布律是:
a && (b || c) == (a && b) || (a && c)
a || (b && c) == (a || b) && (a || c)
答案 5 :(得分:3)
!a && (a || b)
可以考虑二进制真值表,
a b out true true false false true true false false false true false false
所以通过的唯一情况是
(!a && b)
我们可以将DeMorgan的法律适用于此并获得
!(a || !b)
答案 6 :(得分:3)
我建议您使用Wolfram alpha进行简化,有时候它可以对您的表达式做些什么。此特定表达式简化为!a && b
指向西澳大利亚州的链接:http://www.wolframalpha.com/input/?i=%21a%26%26%28a%7C%7Cb%29
答案 7 :(得分:2)
看起来它只会简化为
!a && b
如果你打开括号
(!a && a) || (!a && b)
第一部分(!a&amp;&amp; a)总是假的,所以你可以省略它。
答案 8 :(得分:2)
我假设&#34;或&#34;具有较低的优先级(通常布尔逻辑&amp;&amp;或||是相等的,因此这将是不明确的
!a&&a or !a&&b
= (!a&&a) || (!a && b)
= false || (!a && b)
// because X and not X will never be true for any combination of X
= (!a && b)
// because false || X == X for any value of X
= !a && b
// removed parens