通常在我的代碼中,我需要檢查x的布爾量的狀態是否全部爲真或者所有的布爾是否爲假。所以,我做的:所有布爾的速記YES或所有布爾NO?
BOOL first, second, third;
if((first && second && third) || (!first && !second && !third))
//do something
作爲一個懶惰的程序員,我想知道是否有這種類型的查詢一些數學簡寫,而不必每次都輸入了這件事?
通常在我的代碼中,我需要檢查x的布爾量的狀態是否全部爲真或者所有的布爾是否爲假。所以,我做的:所有布爾的速記YES或所有布爾NO?
BOOL first, second, third;
if((first && second && third) || (!first && !second && !third))
//do something
作爲一個懶惰的程序員,我想知道是否有這種類型的查詢一些數學簡寫,而不必每次都輸入了這件事?
簡寫爲所有的bool同樣是針對(配對)相等性測試:
(first==second && second==third)
當然你也可以擴展爲任意數量的布爾值,有N-1
平等檢查加入與和運營商。
當談到謂詞,通常可以使用兩個變量的量化操作的簡化邏輯 - 通用量化(所有)和存在量化(存在)。如果您在數組中有很多布爾值的
BOOL allValues = (value1 && value2 && value3);
BOOL anyValue = (value1 || value2 || value3);
if (allValues || !anyValue) {
... do something
}
這也將工作 - 你可以創建一個for
週期評估的兩個變量。
如果這是你經常需要的東西,那麼你最好使用一個整數並單獨讀取位。
例如,而不是:
BOOL x; // not this
BOOL y; // not this
BOOL z; // not this
...和,而不是位字段(因爲它們的佈局是實現定義):
unsigned int x : 1; // not this
unsigned int y : 1; // not this
unsigned int z : 1; // not this
... 使用單場如:
unsigned int flags; // do this
...和爲將每個值標記爲;例如:
enum { // do this
FLAG_X = (1 << 0),
FLAG_Y = (1 << 1),
FLAG_Z = (1 << 2),
ALL_FLAGS = 0x07 // "all bits are on"
};
然後,測試「都是假的」你只需說「if (!flags)
」並測試「全真」,你只需說「if (flags == ALL_FLAGS)
」,其中ALL_FLAGS
是一個數字,將所有有效位爲1。其他按位運算符可用於根據需要設置或測試各個位。
請注意,在您必須執行更多操作(例如,創建一個額外的整數字段以存儲更多位)之前,此技術的上限爲32個布爾值。
我敢肯定,這是使用標準布爾邏輯運算符來表達的唯一方法。你想用某種特定語言來做這件事嗎?一些語言有這樣的東西的速記方法 – murgatroid99
如果所有的元素都在不同的集合中,則在謂詞邏輯中存在。 – RBarryYoung
那麼,我使用的是Objective-C – Snowman