当前位置:  开发笔记 > 编程语言 > 正文

如何检查我的字节标志?

如何解决《如何检查我的字节标志?》经验,为你挑选了2个好方法。

我用一个字节来存储一些像标志10101010,我想知道如何验证特定位为10.



1> Kristopher J..:

这是一个可用于测试任何所需位的函数:

bool is_bit_set(unsigned value, unsigned bitindex)
{
    return (value & (1 << bitindex)) != 0;
}

一点解释:

左移位运算符(<<)用于创建位掩码.(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.

最后,我们只检查结果是否为非零.(这实际上可以省略,但我喜欢说明一点.)



2> mdec..:

作为@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
}

上面我使用按位"AND"(&在C中)来检查是否设置了特定位.我还使用了两种不同的方式来制定二进制数.我强烈建议您查看上面的维基百科链接.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有