什麼是在基於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. 的Python 3布爾
- 2. Swift 3 - 原子布爾
- 3. Python的布爾參數3
- 4. 3路布爾值與Java
- 5. Rails 3 SQLite3布爾錯誤
- 6. 靜態公共布爾vs公共靜態布爾
- 7. 3個布爾值的switch case request布爾值
- 8. 帶複選框的多更新布爾狀態(Rails 3)
- 9. 熊貓:3狀態布爾索引與字符串替換
- 10. 更改靜態布爾值
- 11. 布爾代數簡化(3輸入)
- 12. Rails 3 migrations:布爾(mysql vs postgreSQL)
- 13. python 3中是否有布爾變量?
- 14. 區別布爾和布爾?
- 15. 布爾邏輯[布爾]
- 16. 布爾(布爾)值切換
- 17. java:布爾instanceOf布爾?
- 18. System.Web.UI.Page.ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint)
- 19. 默認值爲靜態布爾變量
- 20. 使用私有靜態布爾 - java
- 21. 無狀態組件切換布爾值
- 22. 使用靜態布爾方法
- 23. 在AS3中編碼三態布爾值
- 24. 靜態布爾隱式枚舉c#
- 25. 不理解靜態布爾行爲
- 26. 速度:三態布爾屬性檢查
- 27. 訂閱布爾狀態使用Rx
- 28. 使用私有靜態布爾
- 29. @Output不斷變化的布爾狀態
- 30. 爪哇 - 布爾狀態不改變
此處有怪物: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