C:将整数值翻转为 bool 值

标签 c

我正在寻找一种将整数值(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 intchar(即 byte ).


还有一件事。在你的问题中你写了 val = (val == 1) ? 0 : 1,但这基本上没有意义。至少在 C 中,一切(一切!)都取决于值是零还是非零。与 1 进行显式比较几乎总是一个坏主意,即使不是彻头彻尾的错误。

关于C:将整数值翻转为 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308690/

相关文章:

c - 串口readfile()输出什么类型的参数?在 C/C++ 中

c - Win 7 64 位和对 getaddrinfo 的 undefined reference

c - sizeof 运算符返回奇怪的结果

c - 最优二叉搜索树的重构动态方法

c++ - 访问二维数组时到底发生了什么

c - Freertos + STM32 - malloc 线程内存溢出

c - 在具有多个文件的 C 应用程序中定义外部变量

c - 你会如何解读这些定义?

c - 使用 Millis() 的 Arduino 草图循环

python - 有人有 Linux 上 fd_set 的 gdb pretty-print 代码吗?