我有一个属性:
- (void)keyboardDidShow: (NSNotification *) notifyKeyBoardShow{
// key board is closed
}
- (void)keyboardDidHide: (NSNotification *) notifyKeyBoardHide{
// key board is opened
}
@property(nonatomic) unsigned long availableTypes;
的值为availableTypes
== 481
。
我需要知道哪些位是打开/关闭的。所以我有一个宏:
0001 1110 0001
当我尝试获取位的值时,一切都在0-7位正常工作。但是,当我尝试第8位时:
#define isBitAtIndexOne(number, bit) (BOOL)(number & (1 << bit))
在64位我收到BOOL typeAvailable = isBitAtIndexOne(availableTypes, 8);
(正确值),在32位我收到YES
(无效值,应为NO
)。
我不明白为什么会削减更高的价值。值为YES
,因此它应该能够存储第8位。
- BTW -
我还认为宏正在转换值并削减顶部位,所以我尝试使用内联函数:
unsigned long
但它根本没用。
答案 0 :(得分:0)
我认为这与我怀疑BOOL
时投射到sizeof(BOOL) == 1
有关,当你超越第7位时,你的范围超出了它的范围。
尝试:
#define isBitAtIndexOne(number, bit) ((number & (1 << bit)) != 0)