2011-01-12 37 views
1

什麼是在基於C的語言中創建3態布爾值的好方法?3態布爾?

+5

此處有怪物:http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx – jkerian 2011-01-12 06:51:44

+4

取整數,用1,0,1? – eckes 2011-01-12 06:51:51

+12

步驟1)**不要將它稱爲布爾值** ^^現在它是一個三值/狀態(現在可能更多)。 「troolean」讓人想起,但也許這只是我[錯] - 記住一些俗氣的書呆子笑話... – 2011-01-12 06:53:52

回答

12

而不是直接使用int?你可以typedefenum

typedef enum { 
    LOW  = 0, 
    HIGH  = 1, 
    TRISTATE = 2 
} TriState; 
1

您可以使用int:零,正值和負值可能是表示布爾值的最佳方式。

0

怎麼樣的int?或enum,與int在技術上相同。

18

雖然其他人提供的答案,我想提供最好的一個理由。

使用整數值-1/0/1(或者真的,任何負數/零/正數)。

有了這個方案,有一個可能值的任何子集非常有效的檢查:

(x<0) /* {-1} */ 
(!x) /* {0} */ 
(x>0) /* {1} */ 
(x<=0) /* {-1,0} */ 
(x) /* {-1,1} */ 
(x>=0) /* {0,1} */ 

在x86上,所有的這些都將編譯爲一個單一的test操作碼,然後用適當的條件跳轉的操作碼條件。

如果要隱藏實現,可以使用謂詞宏來測試6個子集中的每個子集。

0

這種失敗的布爾目的,它應該是一個基本的一塊邏輯,無論是打開或關閉。

你可以做的是創建一個三值邏輯的邏輯位,方法是切換另一個變量,下一次循環運行時將第一個變量設置爲true,然後在下一個循環之後立即將第一個變量恢復爲假。

#include<stdio.h> 
#include<stdbool.h> // required, native C has "booleans" but they're just ints 

int main() { 
    bool ternary = false; 
    bool toggler = false; 

    if (ternary == false) { 
     if (toggler == false) { 
      toggler = true; 
     } else { 
      toggler = false; 

      ternary = true; 
     } 
    } else { 
     ternary = false; 
    } 

    printf("%d\n", ternary); 
} 
>>>false 
>>>false 
>>>true 

https://cg5.tutorialspoint.com/share/452/pp3aLdgP