检查位的不同方法
Different ways of checking for a bit
在这里快速提问...
...有什么区别
if ((flags & bit1) == bit1) {
// ...
}
和...
if (flags & bit1) {
// ...
}
?
就是这样。很确定之前有人回答过这个问题,但我没能找到它。
首先检查 flags
是否设置了所有位,其中 bit1
也设置了。第二个检查 flags
是否设置了任何(即至少一个)位,其中 bit1
也设置了(反之亦然;换句话说,是否有任何公共设置位)。如果 bit1
设置了单个位,则“any”和“all”之间没有区别。
首先检查是否设置了 特定 位掩码。
第二个检查是否设置了该位掩码中的任何位
int main() {
int bitpattern = 0b00110110;
int mask = 0b00111111;
if(bitpattern & mask) {
// the bits can be 0b00110110
// or 0b00110111,0b00111110,0b00111111
// or 0b00000110 and so on
}
if((bitpattern & mask) == bitpattern ) {
// the bits are EXACTLY 0b00110110
}
}
在这里快速提问...
...有什么区别
if ((flags & bit1) == bit1) {
// ...
}
和...
if (flags & bit1) {
// ...
}
?
就是这样。很确定之前有人回答过这个问题,但我没能找到它。
首先检查 flags
是否设置了所有位,其中 bit1
也设置了。第二个检查 flags
是否设置了任何(即至少一个)位,其中 bit1
也设置了(反之亦然;换句话说,是否有任何公共设置位)。如果 bit1
设置了单个位,则“any”和“all”之间没有区别。
首先检查是否设置了 特定 位掩码。
第二个检查是否设置了该位掩码中的任何位
int main() {
int bitpattern = 0b00110110;
int mask = 0b00111111;
if(bitpattern & mask) {
// the bits can be 0b00110110
// or 0b00110111,0b00111110,0b00111111
// or 0b00000110 and so on
}
if((bitpattern & mask) == bitpattern ) {
// the bits are EXACTLY 0b00110110
}
}