使用 De Morgans Law 在 C 中编写表达式
Using De Morgans Law to write expressions in C
我很难理解德摩根定律,以及它与布尔逻辑和表达式的关系。专门重写等效表达式,使用布尔逻辑和 &&、|| 和 !运营商。
所以我知道在 C 编程中,De Morgans Law 是一种以不同方式重述表达式(使用 NOT、OR、AND)同时保持等价的方法。
如:
!(condition1 && condition2)
也等于:
!condition1 || !condition two
并且:
condition1 && !(condition2)
也等于:
condition1 || !condition2
(我们只是将括号乘以一元否定 NOT 运算符吗?就像在代数时代一样?)
当我评估一个更棘手的表达式,以及如何用布尔逻辑重写它时,我的大脑开始焦躁。在一些帮助下,我搜索了过去的所有线程,但仍然无法解决这个问题。我开始写出 truth tables,但无法弄清楚如何根据下面的表达式来制作一个。我尽力了,所以请原谅任何错误或不当的做法。
(请注意,以下代码在技术上不是完整的 C 代码,只是我尝试使用布尔逻辑编写的表达式的示例,以合并到 C 代码中。)
我无法将它合并到我的任何 C 程序中,因为我无法获得它。
例如:
!( a > 12 ) && !(b >= 3 )
本质上陈述(NOT 之前的真值形式):
a > 12 && b >= 3
表示 A 大于 12,并且 b 大于或等于 3。
说实话table:
a b a&&b
1 0 false - a is greater than 12, but b is not greater than or equal to 3.
0 1 false - this time a is less than 12 while b >= 3.
0 0 false - a is not > 12 and b is not >= 3.
1 1 true - a is greater than 12, and b is >= 3.
现在应用 NOT 运算符:(这是我开始迷路的地方)
!( a > 12 ) && !( b >= 3 )
并使用德摩根定律写出(尝试)等价物:
所以……
!( a > 12 ) && !( b >= 3 )
等同于
a < 12 || b < 3
(有没有办法交叉比较它们 table 看看它们是否真的等价?)
另一个,这次有点棘手...
!( a == b ) && !( c != 2 )
等同于:
(a != b) || (c = 2)
最后
!( (a < 9 ) || ( b <=3 ) )
等同于:
a > 9 && b > 3
我不确定这些是否正确,但我认为最好的办法是停止阅读它并继续尝试。
看来你是在看条件部分,想多了。
一起来看看规则:
not A AND not B = not (A OR B)
not A OR not B = not (A AND B)
用简单的英语来说,这意味着您可以分配一个 NOT 并反转 AND 和 OR。所以给出这个表达式:
!( a > 12 ) && !(b >= 3 )
这符合规则的第一个版本。保持 >
和 >=
不变,您可以从两边分配 NOT 并得到:
!(( a > 12 ) || (b >= 3 ))
AND 更改为 OR,并且(这是您错过的部分)NOT 被拉出。同样,这个:
!( a == b ) && !( c != 2 )
变为:
!(( a == b ) || ( c != 2 ))
那么最后一个:
!( (a < 9 ) || ( b <=3 ) )
通过德摩根定律变成这样:
!(a < 9 ) && !(b <=3 )
然后切换条件:
(a >= 9 ) && (b > 3 )
我认为您感到困惑的地方在于您试图翻转条件并同时应用 DeMorgan 定律。不要那样做。根据需要分别执行每个部分。
时间久了,但我一直记得的方式给出了概括的表达方式:
A op B (where op is and,or) NOTE: A and B could be "sub-expressions"
1) Change or to and, and to or
2) Invert the individual terms
3) Invert the entire expression
A and B => !(!A or !B)
A or B => !(!A and !B)
A 和 B 情况的真值表:
A B | A&B
------------
T T | T
T F | F
F T | F
F F | F
A B !A !B !A|!B !(!A|!B)
------------------------------
T T F F F T
T F F T T F
F T T F T F
F F T T T F
我很难理解德摩根定律,以及它与布尔逻辑和表达式的关系。专门重写等效表达式,使用布尔逻辑和 &&、|| 和 !运营商。
所以我知道在 C 编程中,De Morgans Law 是一种以不同方式重述表达式(使用 NOT、OR、AND)同时保持等价的方法。
如:
!(condition1 && condition2)
也等于:
!condition1 || !condition two
并且:
condition1 && !(condition2)
也等于:
condition1 || !condition2
(我们只是将括号乘以一元否定 NOT 运算符吗?就像在代数时代一样?)
当我评估一个更棘手的表达式,以及如何用布尔逻辑重写它时,我的大脑开始焦躁。在一些帮助下,我搜索了过去的所有线程,但仍然无法解决这个问题。我开始写出 truth tables,但无法弄清楚如何根据下面的表达式来制作一个。我尽力了,所以请原谅任何错误或不当的做法。
(请注意,以下代码在技术上不是完整的 C 代码,只是我尝试使用布尔逻辑编写的表达式的示例,以合并到 C 代码中。)
我无法将它合并到我的任何 C 程序中,因为我无法获得它。
例如:
!( a > 12 ) && !(b >= 3 )
本质上陈述(NOT 之前的真值形式):
a > 12 && b >= 3
表示 A 大于 12,并且 b 大于或等于 3。
说实话table:
a b a&&b
1 0 false - a is greater than 12, but b is not greater than or equal to 3.
0 1 false - this time a is less than 12 while b >= 3.
0 0 false - a is not > 12 and b is not >= 3.
1 1 true - a is greater than 12, and b is >= 3.
现在应用 NOT 运算符:(这是我开始迷路的地方)
!( a > 12 ) && !( b >= 3 )
并使用德摩根定律写出(尝试)等价物: 所以……
!( a > 12 ) && !( b >= 3 )
等同于
a < 12 || b < 3
(有没有办法交叉比较它们 table 看看它们是否真的等价?)
另一个,这次有点棘手...
!( a == b ) && !( c != 2 )
等同于:
(a != b) || (c = 2)
最后
!( (a < 9 ) || ( b <=3 ) )
等同于:
a > 9 && b > 3
我不确定这些是否正确,但我认为最好的办法是停止阅读它并继续尝试。
看来你是在看条件部分,想多了。
一起来看看规则:
not A AND not B = not (A OR B)
not A OR not B = not (A AND B)
用简单的英语来说,这意味着您可以分配一个 NOT 并反转 AND 和 OR。所以给出这个表达式:
!( a > 12 ) && !(b >= 3 )
这符合规则的第一个版本。保持 >
和 >=
不变,您可以从两边分配 NOT 并得到:
!(( a > 12 ) || (b >= 3 ))
AND 更改为 OR,并且(这是您错过的部分)NOT 被拉出。同样,这个:
!( a == b ) && !( c != 2 )
变为:
!(( a == b ) || ( c != 2 ))
那么最后一个:
!( (a < 9 ) || ( b <=3 ) )
通过德摩根定律变成这样:
!(a < 9 ) && !(b <=3 )
然后切换条件:
(a >= 9 ) && (b > 3 )
我认为您感到困惑的地方在于您试图翻转条件并同时应用 DeMorgan 定律。不要那样做。根据需要分别执行每个部分。
时间久了,但我一直记得的方式给出了概括的表达方式:
A op B (where op is and,or) NOTE: A and B could be "sub-expressions"
1) Change or to and, and to or
2) Invert the individual terms
3) Invert the entire expression
A and B => !(!A or !B)
A or B => !(!A and !B)
A 和 B 情况的真值表:
A B | A&B
------------
T T | T
T F | F
F T | F
F F | F
A B !A !B !A|!B !(!A|!B)
------------------------------
T T F F F T
T F F T T F
F T T F T F
F F T T T F