三态布尔?

The*_*978 5 c state boolean

在基于C语言中创建3状态布尔值的好方法是什么?

R..*_*R.. 22

虽然其他人提供了答案,但我想为最好的答案提供理由.

使用整数值-1/0/1(或实际上,任何负数/零/正数).

使用此方案,可以非常有效地检查可能值的任何子集:

(x<0)  /*   {-1} */
(!x)   /*    {0} */
(x>0)  /*    {1} */
(x<=0) /* {-1,0} */
(x)    /* {-1,1} */
(x>=0) /*  {0,1} */
Run Code Online (Sandbox Code Playgroud)

在x86上,所有这些都将编译为单个test操作码,然后是具有适当条件的条件跳转操作码.

如果要隐藏实现,可以使用谓词宏来测试6个子集中的每个子集.

  • 此外,此实现允许轻松实现 tribool 操作。NOT = -1 * value, AND = MIN(value1, value2), OR = MAX(value1, value2)。图表可以在 https://en.wikipedia.org/wiki/Three-valued_logic 上找到 (2认同)

Car*_*rum 13

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

typedef enum {
   LOW      = 0,
   HIGH     = 1,
   TRISTATE = 2
} TriState;
Run Code Online (Sandbox Code Playgroud)