逻辑:是(A &&!(B || C))|| (B || C)与(A || B || C)相同?

jpw*_*wco 10 logic

我遇到了一些obj-c代码,我想知道是否有办法简化它:

#if ( A && !(B || C)) || ( B || C )
Run Code Online (Sandbox Code Playgroud)

这是一样的吗?

#if ( A || B || C )
Run Code Online (Sandbox Code Playgroud)

如果没有,是否有另一种方式来制定它更容易阅读?

[编辑]我在问这个问题之前尝试了真值表,但我认为我不得不遗漏一些东西因为我怀疑Foundation.framework/Foundation.h会采用这种更复杂的形式.它有充分的理由吗?

这是原始代码(来自Foundation.h):

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
Run Code Online (Sandbox Code Playgroud)

jtp*_*yda 13

是.像其他人说的那样,你可以把它真相表.德摩根的规则也可以提供帮助.

但是,我认为最好的选择是使用卡诺图.学习需要几分钟,但Karnaugh Maps允许您始终找到布尔逻辑的最小表达式.真值表可以验证最小化,但它们无法提供给您.

这是我如何得到它:

一,表格布局:

         AB
     00   01   11   10
  0|    |    |    |    |
C 1|    |    |    |    |
Run Code Online (Sandbox Code Playgroud)

现在,考虑你的等式,B || C总是会导致真相:

         AB
     00   01   11   10
  0|    |  T |  T |    |
C 1|  T |  T |  T |  T |
Run Code Online (Sandbox Code Playgroud)

这只留下两个案例.在任何一种情况下,右侧评估为假.对于000,左侧也计算为假(0 &&!(无论如何)为假).对于100,1 &&!(0 ||| 0)的计算结果为true.因此,该陈述是正确的.填写:

         AB
     00   01   11   10
  0|  F |  T |  T |  T |
C 1|  T |  T |  T |  T |
Run Code Online (Sandbox Code Playgroud)

现在,我们只需要"掩盖"所有真相."C"将覆盖底行."B"将覆盖中间正方形(四个值).因此,"B || C"涵盖除右上方之外的所有方块.现在,"A"将覆盖正确的四空格.这是多余的,这是可以的.因此,"A || B || C"涵盖了所有真正的正方形,并省略了唯一的假正方形.


SwD*_*n81 8

A | B | C | (B || C) | (!(B || C)) | (A && !(B || C)) | (A && (!(B || C)) || (B || C) | (A || B || C)
------------------------------------------------------------------------------------------------------
T | T | T |     T    |       F     |         F        |                 T             |         T      
T | T | F |     T    |       F     |         F        |                 T             |         T 
T | F | T |     T    |       F     |         F        |                 T             |         T 
T | F | F |     F    |       T     |         T        |                 T             |         T 
F | T | T |     T    |       F     |         F        |                 T             |         T 
F | T | F |     T    |       F     |         F        |                 T             |         T 
F | F | T |     T    |       F     |         F        |                 T             |         T 
F | F | F |     F    |       T     |         F        |                 F             |         F 
Run Code Online (Sandbox Code Playgroud)

根据最后两列,我会说是的.


Mar*_*ett 7

获得笔+纸+尝试它,只有8种可能的输入

  • 我也是,但哪一个是愚蠢的,哪个不是取决于实验.;) (2认同)

det*_*zed 7

他们是一样的.您可以使用真值表生成器进行测试.这两种表达式给出false只有在一种情况下,当A,BC都是false.