查询位标志的状态?

时间:2010-10-08 21:08:46

标签: c++

我正在尝试解析一些具有按位标志列的文件。这个标志中有11位,我需要找出文件中的每一行,第5位的值是什么(从1开始)。

2 个答案:

答案 0 :(得分:6)

if (flags & 0x10) ....

我怎么知道那个掩码(0x10)

这里是8位

0b00000000

这是第五个从一个开始(从右边开始)

  87654321        
0b00010000

并以十六进制为

0x10

答案 1 :(得分:1)

对于少量标志可能有点过分,但我发现使用std::bitset更容易操作位。

首先,从flags“构造”一个​​11位的位集。

std::bitset< 11 > flags_bitset( flags );

然后,“测试”第五位

if( flags_bitset.test( 4 ) {  // 4, because indexing is 0 based.
    /* something */
}

请参阅:http://www.cplusplus.com/reference/stl/bitset/test/

手动操作,请尝试

const uint32_t mask = 1U << 4;  // '1' in fifth bit and rest '0' 
if( flag & mask ) { .. }