有点与 boolean 值的比较

标签 c gcc boolean bitwise-operators

假设我有一组标志,用 uint16_t flags 编码.例如,AMAZING_FLAG = 0x02 .
现在,我有一个功能。这个函数需要检查我是否要更改标志,因为如果我想这样做,我需要写入闪存。那是昂贵的。因此,我想要一个检查,告诉我是否 flags & AMAZING_FLAG等于 doSet .这是第一个想法:

setAmazingFlag(bool doSet)
{
    if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
        // Really expensive thing
        // Update flags
    }
}

这不是一个直观的 if 语句。
我觉得应该有更好的方法,例如:
if ((flags & AMAZING_FLAG) != doSet){

}

但这实际上不起作用,true似乎等于 0x01 .

那么,有没有一种巧妙的方法可以将一点与 boolean 值进行比较?

最佳答案

要将任何非零数字转换为 1(真),有一个古老的技巧:应用 ! (not) 运算符两次。

if (!!(flags & AMAZING_FLAG) != doSet){

关于有点与 boolean 值的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60317850/

相关文章:

我可以使用字符串作为#define 的常量部分吗?

c++ - 使用 Graphviz for Windows 程序可视化函数调用

c++ - 将代码块用于 const unsigned long 时出现 GCC 错误

c - 为什么 boolean 数据类型没有在 C 中实现

C编程: How can I get parent directory?

c - 在 C 语言中获取菜单驱动 CLI 的用户输入的最佳方法

将数字转换为二进制

c - 用于优化给定 CPU 架构的 GCC 选项

C# 将 bool 重新解释为 byte/int(无分支)

java - 如何存储 boolean 测试/表达式而不评估它?