是否可以在一个语句中执行2个相反的位操作?

时间:2012-11-05 22:08:00

标签: c++ bit-manipulation bitwise-operators

我在c ++方面有点新鲜,对于位操作(我只知道基础知识)而言我是一个完整的新手,我正在开发一个项目,我需要将文档的状态保持在一个位域

简而言之:我想在无条件删除flag2的同时保留flag1的最后一个状态。 我现在所拥有的是这样的:

bitfield |= flag1; bitfield &= ~flag2;

问题是:有没有办法在一个语句中执行该操作?

在我的情况下,我真的不能像这样切换它们:

bitfield ^= (flag1|flag2)

这是明显的答案浮现在脑海中,但问题是flag1有时会被设置,有时它不是,我想保留它,因为我在删除flag2时从最后一个函数调用中收到它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

你显然可以做到

 bitfield = (bitfield | flag1) & ~flag2;

您可以使用comma operator,例如

 (bitfield |= flag1), (bitfield &= ~flag2);