从无符号整数中获取位集位置

本文关键字:位置 获取 无符号整数 | 更新日期: 2023-09-27 18:07:13

我有一个来自PDF的标志,它返回4096的整数。根据这个网站转换器,我应该能够测试第13个位置,并使用下面的函数得到一个积极的结果,但它只给出了一个积极的结果,回到位置12?位置是基于0还是什么所以我需要检查(pos - 1)?

bool GetIsBitSet(int flags, int pos)
{
    return (flags & (1 << pos)) != 0;
}

从无符号整数中获取位集位置

是的,函数中的位置参数是基于零的。这是由于测试的实现方式,本质上是通过将1左移pos的次数(相当于乘以2 pos的次数)来设置掩码。

 1 << 0   = 1     // tests bit 1   binary: 0000 0000 0000 0001
 1 << 1   = 2     // tests bit 2,  binary: 0000 0000 0000 0010
 1 << 2   = 4     // tests bit 3,  binary: 0000 0000 0000 0100
     ... 
 1 << 12  = 4096  // tests bit 13, binary: 0001 0000 0000 0000