如何检查两个位图的值?

时间:2017-03-22 13:05:11

标签: c++ c++11 bit-manipulation bit

我有两个bit maps,我需要检查其中一个值是否存在。我是否需要检查两者,或者我可以添加它们并进行一次检查吗?

1 个答案:

答案 0 :(得分:1)

取决于“添加”的含义。我假设你的意思是按位OR

const unsigned char map = map1 | map2;

很明显,如果在其中一个地图中设置了一个位,它也将在最终的map中设置。但是,我不能建议哪个版本更快,按位OR然后检查

bool bitIsSet = (map1 | map2) & maskForBit;

或检查两者并使用逻辑OR

bool bitIsSet = (map1 & maskForBit) || (map2 & maskForBit);

但是我认为在速度方面你的应用程序不是关键点(否则测试它!)。这似乎更像是一个品味问题,或者你可以更好/更快地阅读/理解的内容。

修改 Hans的评论只是提醒我,你也可能意味着该位应该只在一个地图中设置。在这种情况下,只需在第一种情况下将按位OR与按位XOR进行交换,在第二种情况下将逻辑OR与不等于!=进行交换。