使用de Morgans法在C中撰写表达



我很难理解摩根法律,以及它与布尔逻辑和表达方式的关系。特别是使用boolean逻辑和&&,|和!操作员。

因此,我知道在C编程中,de Morgans定律是一种以不同的方式重新调整表达方式的方式(不使用,或)。

例如:

!(condition1 && condition2)

也等于:

!condition1 || !condition two

和:

condition1 && !(condition2)

也等于:

condition1 || !condition2 

(我们只是将括号乘以在这里的一单位否定词吗?就像在良好的代数天吗?)

我的大脑开始煎炸的地方是我评估表达更棘手的时候,以及如何使用布尔逻辑重写它。我已经在任何帮助的情况下搜索了任何过去的线程,但仍然无法将我的头缠绕在此方面。我开始写出真相表,但无法弄清楚如何基于下面的表达式。我会尽力而为,所以请原谅任何错误或不良的练习。

(请注意,以下代码在技术上不是完成C代码,只是我试图使用布尔逻辑编写的表达式的示例,以将其整合到C代码中。)

我无法将其整合到我的任何C程序中,因为我无法获得它。

例如:

!( a > 12 ) && !(b >= 3 )

本质上是指数(事实前的真相):

a > 12 && b >= 3

表示A大于12,并且B要么大于或等于3。

将其带到真相表:

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.

现在应用非操作员:(这是我开始丢失的地方)

!( a > 12 ) && !( b >= 3 )

并使用de Morgans法律写(尝试)同等学历:所以…

!( a > 12 ) && !( b >= 3 )

等于

a < 12 || b < 3 

(是否有一种方法可以在真相表中进行交叉比较,以查看它们是否真的相等?)

另一个,这次有点棘手...

!( a == b ) && !( c != 2 )

等效于:

(a != b) || (c = 2)

最后

!( (a < 9 ) || ( b <=3 ) )

等效于:

a > 9 && b > 3

我不确定其中的任何一个是否正确,但是我认为最好的办法就是停止阅读它,然后继续尝试。

已经很长一段时间了,但是我总是记得它的一般表达式:

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

看来您在看条件零件并过度思考事物。

让我们看一下规则:

not A AND not B = not (A OR B)
not A OR not B = not (A AND B)

用普通的英语,这意味着您可以分发一个不和倒转和或。因此,鉴于此表达式:

!( a > 12 ) && !(b >= 3 )

这符合规则的第一个版本。离开>>=,您可以分发并非双方分发:

!(( a > 12 ) || (b >= 3 ))

并将其更改为OR,并且(这是您错过的部分)未被拉出。同样,这是:

!( a == b ) && !( c != 2 )

变为:

!(( a == b ) || ( c != 2 ))

然后最后一个:

!( (a < 9 ) || ( b <=3 ) )

通过demorgan的定律转入这一点:

!(a < 9 ) && !(b <=3 )

然后切换条件:

(a >= 9 ) && (b > 3 )

我认为您感到困惑的是,您试图同时翻转有条件的条件并应用Demorgan的法律。不要那样做。根据需要单独执行每个部分。

相关内容

  • 没有找到相关文章

最新更新