Kri*_*son 46
这是一个可用于测试任何所需位的函数:
bool is_bit_set(unsigned value, unsigned bitindex)
{
return (value & (1 << bitindex)) != 0;
}
Run Code Online (Sandbox Code Playgroud)
一点解释:
左移位运算符(<<)用于创建位掩码.(1 << 0)将等于00000001,(1 << 1)将等于00000010,(1 << 3)将等于00001000等.因此0的移位测试最右边的位.31的偏移将是32位值的最左边的位.
按位运算符(&)给出一个结果,其中两侧的所有位都设置为1.例子:1111和0001 = 0001; 1111&0010 == 0010; 0000&0001 = 0000.因此,如果相关位的值为1,则表达式(值&(1 << bitindex))将返回位掩码,或者如果相关位为0,则返回0.
最后,我们只检查结果是否为非零.(这实际上可以省略,但我喜欢说明一点.)
作为@Daoks答案的延伸
C中的按位"AND"运算符也是&,所以你想要做的是:
unsigned char a = 0xAA; // 10101010 in hex
unsigned char b = (1 << bitpos); //Where bitpos is the position you want to check
if(a & b) {
//bit set
}
else {
//not set
}
Run Code Online (Sandbox Code Playgroud)
上面我使用按位"AND"(&在C中)来检查是否设置了特定位.我还使用了两种不同的方式来制定二进制数.我强烈建议您查看上面的维基百科链接.