这些位掩码之间的区别

时间:2013-03-17 09:12:59

标签: c binary bitwise-operators

我想知道下面的位掩码的区别是什么,以及你可以使用的场景。

int a  = 1;
int b  = 2;
int c  = 4;
int d  = 8;


int letters = a | b | d; 

int aviableLettersMask = //input some letter;  


if (letters & aviableLettersMask)
{

}

if ((letters & ~aviableLettersMask) == 0)
{

}

由于

2 个答案:

答案 0 :(得分:1)

区别在于:

第一次检查aviableLettersMask

letters中是否有任何字母

第二个 - 如果aviableLettersMask中没有其他字母存在。

答案 1 :(得分:1)

如果AviableLettersMask包含至少一个字母或Letters,则第一个表达式为true:

a|b|d & a|c = a  // ok
a|b|d & c = 0    // false
a|b|d & 0 = 0    // false

如果AviableLettersMask包含Letters

,则第二个表达式将等于0
a|b|d & ~(a|b)     = a|b|d & c|d = d  // false
a|b|d & ~(a|b|d)   = a|b|d & c   = 0  // ok
a|b|d & ~(a|b|c|d) = a|b|d & 0   = 0  // ok