c - 将枚举值切换为位标志

标签 c enums typedef

我有一组可用的枚举选项

typdef enum { 
option1 = 1 << 0,
option2 = 1 << 1,
option3 = 1 << 2,
} availableOptions;

我想在执行它们之前根据用户的输入来关闭和打开它们。

例如:

// iniatially set to all options
myOption = option1 | option2 | option3;

//在用户输入之后

void toggleOption1()
{
  // how can I toggle an option that was already set without impacting the other options
}

最佳答案

使用按位异或:

void toggleOption1()
{
    myOption ^= option1;
}

插入符号 ^ 是按位异或运算符。声明:

a ^= b;

仅翻转 a 中的位,其中设置了 b 中的相应位。所有其他位均保持不变。

关于c - 将枚举值切换为位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032057/

相关文章:

c - sprintf(newpath, "%s%s",...) 的 sprintf_s 模拟是什么?

c++ - 带有类模板 typedef 参数的函数模板

c++ - 在类方法内部访问类的命名空间之外?

c语言关于typedef的一些事情

c - Arduino 代码 — while(0) 有什么用?

c - 在 Cocoa/Objective-C/C 中编写 DLNA 服务器 (DMS)

c - 什么是 *-devel 包?

c# - 如何类型检查枚举实例基类?

java - 为什么枚举类型的私有(private)字段对包含的类可见?

c# - 具有多个值的枚举名称