我正在寻找一种将整数值(8 位)用作 bool 值(0 -> False,1 -> True)的方法。
在许多语言中,您可以执行 val = !val
来更改值。我唯一做的就是 val = (val == 1) ? 0 : 1
。我不知道在 C 中是否可以使用 bite 值。
它适用于带有 8 位处理器的旧硬件,所以使用 boolean
的想法是不可能的,我无法安装外部库。
最佳答案
在 C 中,0 值被认为是“假”,任何其他(非零)值被认为是“真”。因此,将任意 int
值转换为明确的 true 或 false bool 值的一种非常明确的方法是使用(C99 及更高版本)bool
类型:
#include <stdbool.h>
int i;
bool b;
b = (i != 0) ? true : false;
但由于 !=
运算符本质上“返回”一个 bool 值,您也可以这样做
b = (i != 0);
并且由于零/非零定义内置于语言中,您也可以这样做
b = i;
但您不必使用 bool
类型。如果你有一个任意值的 int 并且你想强制它“就地”为 0/1,你有同样的选择:
i = (i != 0) ? 1 : 0;
或者
i = (i != 0);
或者还有一个常用的技巧:
i = !!i;
最后一个简洁、通俗,但有些晦涩。它将零/非零更改为 1/0,然后变回 0/1。
我已经使用 int
类型展示了这些示例,但它们都可以与 short int
或 char
(即 byte ).
还有一件事。在你的问题中你写了 val = (val == 1) ? 0 : 1
,但这基本上没有意义。至少在 C 中,一切(一切!)都取决于值是零还是非零。与 1 进行显式比较几乎总是一个坏主意,即使不是彻头彻尾的错误。
关于C:将整数值翻转为 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308690/