什麼是在基於C的語言中創建3態布爾值的好方法?3態布爾?
Q
3態布爾?
1
A
回答
12
而不是直接使用int
?你可以typedef
的enum
:
typedef enum {
LOW = 0,
HIGH = 1,
TRISTATE = 2
} TriState;
1
您可以使用int
:零,正值和負值可能是表示布爾值的最佳方式。
0
怎麼樣的int
?或enum
,與int
在技術上相同。
0
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
相關問題
- 1. Swift 3 - 原子布爾
- 2. 3路布爾值與Java
- 3. Rails 3 SQLite3布爾錯誤
- 4. 帶複選框的多更新布爾狀態(Rails 3)
- 5. 熊貓:3狀態布爾索引與字符串替換
- 6. Rails 3 migrations:布爾(mysql vs postgreSQL)
- 7. 布爾邏輯[布爾]
- 8. System.Web.UI.Page.ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint)
- 9. java:布爾instanceOf布爾?
- 10. 不理解靜態布爾行爲
- 11. 無狀態組件切換布爾值
- 12. 爪哇 - 布爾狀態不改變
- 13. @Output不斷變化的布爾狀態
- 14. Java公共靜態布爾方法
- 15. 速度:三態布爾屬性檢查
- 16. 訂閱布爾狀態使用Rx
- 17. 布爾狀態測試 - 哪個好?
- 18. 如何將布爾轉換可空布爾(布爾?)
- 19. 流程布爾型,布爾值和布爾型
- 20. 過濾布爾與布爾查詢:elasticsearch
- 21. 與sqlite的布爾的布爾值
- 22. 證明F(˚F布爾)=布爾
- 23. 如果(布爾==假)與IF(布爾!)
- 24. 的typedef,枚舉,布爾,布爾------迷茫
- 25. 如何發佈到NSNotificationCenter關於布爾狀態?
- 26. 哈斯克爾 - 布爾RoseTree
- 27. 這個類中的靜態布爾和一個私有靜態布爾有什麼區別?
- 28. 3動態寬列布局不表
- 29. 3列布局 - 循環動態數據
- 30. 動態1-2-3列布局
此處有怪物:http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx – jkerian 2011-01-12 06:51:44
取整數,用1,0,1? – eckes 2011-01-12 06:51:51
步驟1)**不要將它稱爲布爾值** ^^現在它是一個三值/狀態(現在可能更多)。 「troolean」讓人想起,但也許這只是我[錯] - 記住一些俗氣的書呆子笑話... – 2011-01-12 06:53:52