我遇到了一些OBJ-C代码,我不知道是否有一种方法来简化它:逻辑:是(A &&!(B || C))|| (B || C)与(A || B || C)相同?
#if (A && !(B || C)) || (B || C)
这是一样的?
#if (A || B || C)
如果没有,是否有另一种方法来制定它会更容易阅读?
在问这个问题之前,我尝试了真值表,但是以为我不得不错过一些东西,因为我怀疑Foundation.framework/Foundation.h会使用这个更复杂的表格。它有一个很好的理由吗?
这里的原代码(从Foundation.h):
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)
为什么不直接实现与结果有点道理表和测试它自己?只有8个不同的输入| A = true,B = true,C = true | A =真,B =真。 C = false |等等等等。比较真值表。如果输出是相同的,那么你的逻辑是相同的。 – AndyPerfect 2011-01-21 20:58:18
问题标题中的圆括号与问题本身略有不同。如果标题是正确的,那么部分“!(B || C)||(B || C)”,可以用“真实”所取代,让你有“A &&真”,这仅相当于A.另一方面,问题版本似乎缺少一对括号,否则你有一个语法错误。除此之外,我同意其他海报,创建真相表。 – cobaltduck 2011-01-21 21:03:06
@PeterPerháč - 感谢编辑! – jpwco 2011-01-21 22:09:27