将枚举值切换为位标志

时间:2013-11-17 14:49:37

标签: c enums typedef options

我有一组可用的enumed选项

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
}

1 个答案:

答案 0 :(得分:7)

使用逐位异或:

void toggleOption1()
{
    myOption ^= option1;
}

插入符号^是按位的XOR运算符。声明:

a ^= b;

仅翻转ab中相应位的位。所有其他位都保持不变。