我想通过对它们进行位掩码来跟踪一些选项,并从 this answer 中借用了位掩码值, 但它们似乎无法协同工作。
#include <iostream>
#define OP1 0x00003FFFUL
#define OP2 0x00007FFFUL
#define OP3 0x0000FFFFUL
int main() {
unsigned long params = 0; // .
params |= OP3;
if ( (params & OP1) == OP1)
std::cout << "Whoa. Lame masking\n";
}
这是一个类型问题,还是这个方法不能用于一次保存超过 1 个选项(OP1、OP2 和 OP3 都希望保持在相同的 params
中)?
最佳答案
对于选项,您应该使用其他不重叠的掩码,例如:
#define OP1 0x000000FUL
#define OP2 0x00000F0UL
#define OP3 0x0000F00UL
或者(在这种情况下,您将能够存储尽可能多的选项):
#define OP1 0x0000001UL
#define OP2 0x0000002UL
#define OP3 0x0000004UL
//ETC...
你的面具永远不会正常工作,因为如果设置了 OP3,那么 OP1 和 OP2 将被包含(如果你使用 OP2 也是如此,那么将隐含 OP1):
FFFF = 1111111111111111
& 3FFF = 0011111111111111
-----------------------
3FFF = 0011111111111111
您粘贴的示例中的掩码旨在推断 UL 的最后几位。
关于c++ - 按位,位掩码 : whats wrong here?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6245578/