2014-06-06 52 views
0

我有一个返回4096的整数的PDF标志。根据this website converter,我应该能够测试第13个位置,并使用下面的函数返回正面结果,但它只是给位置12返回一个积极的结果?是位置零基于什么,所以我需要检查(pos - 1)?从无符号整数中获取位设置位置

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

简答:是 – ken2k

+1

关闭1错误? – TheNorthWes

回答

1

是的,函数中的位置参数是从零开始的。这是由于实施测试的方式,其实质上通过移动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 
+0

谢谢 - 我从PDF工具供应商那里得到了代码,所以我不得不做一些挖掘,以了解他的代码为什么不起作用。一旦我意识到它在任何地方都被关闭了,我认为他没有考虑零基,所以这只是一个理智的检查。 – RichC