And*_*ndy 24 language-agnostic boolean-logic
我有点困惑!a&&(a||b)
.如果我直接看它并简单地解释它,它看起来好像是一样的
!a&&a or !a&&b
Run Code Online (Sandbox Code Playgroud)
但这似乎有点奇怪,因为既然a
不可能是真实的,那么只有后者是真的才会成真.我也像这样解释它
!a || a&&b
Run Code Online (Sandbox Code Playgroud)
我真的不知道我是如何想出这个,但它看起来更合乎逻辑,因为没有矛盾.有人可以帮我吗?
Luk*_*sko 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 |
Run Code Online (Sandbox Code Playgroud)
!a && (a || b)
相当于(!a && a) || (!a && b)
.(!a && a)
相当于false
把它们放在一起:
!a && (a || b) <=> (!a && a) || (!a && b) <=> false || (!a && b) <=> !a && b
Syl*_*oux 11
在Java中,与大多数 1种语言一样,一元的!
优先级高于&&
.
所以,!a&&(a||b)
是 (!a)&&(a||b)
您可以使用卡诺图来表示该表达式的真值表:
| a = 0 | a = 1 |
------+-------+-------+
b = 0 | 0 | 0 |
------+-------+-------+
b = 1 | 1 | 0 |
------+-------+-------+
Run Code Online (Sandbox Code Playgroud)
现在,可以很容易地看出,唯一真实的情况是何时(!a) && b
.
所以,!a&&(a||b)
是 !a && b
1 见下面的评论.