我遇到了一些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