gpt4 book ai didi

c++ - 按位,位掩码 : whats wrong here?

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:04 25 4
gpt4 key购买 nike

我想通过对它们进行位掩码来跟踪一些选项,并从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com