C语言 三态布尔

dwbf0jvd  于 2023-01-16  发布在  其他
关注(0)|答案(7)|浏览(178)

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

wribegjk

wribegjk1#

虽然其他人已经给出了答案,但我想为最好的答案提供一个理由。
使用整数值-1/0/1(或者实际上,任何负/零/正)。
利用该方案,存在对可能值的任何子集的极其有效的检查:

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

在x86上,所有这些都将编译为一个test操作码,后跟一个具有适当条件的条件跳转操作码。
如果您想隐藏实现,可以使用 predicate 宏来测试6个子集中的每一个。

fkvaft9z

fkvaft9z2#

除了直接使用int之外,您还可以使用typedefenum

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

5lwkijsr4#

您可以使用int:零、正和负可能是表示布尔值的最佳方式。

ruyhziif

ruyhziif5#

在C# .NET中,您可以使用可为空的 bool 类型实现trinary逻辑布尔测试(即定义一个三值布尔变量)。只需测试空值,并将其视为程序流中的第三个可能状态/条件。

z4bn682m

z4bn682m6#

intenum怎么样?enum在技术上与int相同。

cczfrluj

cczfrluj7#

这就违背了布尔值的目的,它应该是一个基本的逻辑,要么开,要么关。
通过切换另一个变量,在下一次循环运行时将第一个变量设置为true,然后在下一次循环中立即将第一个变量恢复为false,可以创建三值逻辑的逻辑位。

#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

相关问题