我正在尝试解析一些具有按位标志列的文件。这个标志中有11位,我需要找出文件中的每一行,第5位的值是什么(从1开始)。
答案 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 ) { .. }