Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查两个位图上的值?_C++_C++11_Bit Manipulation_Bit - Fatal编程技术网

C++ 如何检查两个位图上的值?

C++ 如何检查两个位图上的值?,c++,c++11,bit-manipulation,bit,C++,C++11,Bit Manipulation,Bit,我有两个,我需要检查其中一个是否有值。我是否需要同时检查这两个选项,或者我可以添加它们并进行一次检查?取决于“添加”的含义。我想你是指按位或 const unsigned char map = map1 | map2; 很明显,如果在其中一个映射中设置了位,那么它也将在最终的映射中设置。但是,我无法给出哪个版本更快的建议,请执行按位或然后检查 bool bitIsSet = (map1 | map2) & maskForBit; 或检查两者并使用逻辑or bool bitIsSet

我有两个,我需要检查其中一个是否有值。我是否需要同时检查这两个选项,或者我可以添加它们并进行一次检查?

取决于“添加”的含义。我想你是指按位或

const unsigned char map = map1 | map2;
很明显,如果在其中一个映射中设置了位,那么它也将在最终的
映射中设置。但是,我无法给出哪个版本更快的建议,请执行按位或然后检查

bool bitIsSet = (map1 | map2) & maskForBit;
或检查两者并使用逻辑or

bool bitIsSet = (map1 & maskForBit) || (map2 & maskForBit);
但我认为它在应用程序的速度方面并不是一个关键点(否则就测试它!)。这似乎更像是一个品味的问题,或者你能更好/更快地阅读/理解什么

编辑
汉斯的评论只是提醒我,你也可能意味着比特应该只在一张地图上设置。在这种情况下,只需将第一种情况下的按位OR与按位XOR以及逻辑OR交换一个不相等的
=在第二种情况下。

对要检查的位使用异或和掩码