切换枚举值作为位标志

9
我有一组可用的枚举选项。
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个回答

17

使用按位异或运算:

void toggleOption1()
{
    myOption ^= option1;
}

插入符号^是按位异或运算符。该语句:

a ^= b;

翻转 a 中与 b 对应位上值为 1 的二进制位,其它位保持不变。


完美,这正是我在寻找的。 - Avba
如果我有所有选项的之前和之后的值,是否可以知道哪些选项被切换了? - Avba
也许举个例子会更好: - Avba
原始选项 = 选项1 | 选项2; //切换后 更新选项 = 选项1 | 选项3;我理解选项2被“关闭”了。 - Avba
@AvnerBarr 再次挺身而出... oldOptions ^ newOptions 也会告诉你哪些选项被翻转了。 - godel9
然后,使用每个选项名称和符号“&”。 - Avba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接