【发布时间】:2013-11-23 22:22:31
【问题描述】:
据我了解,在基于 C 的 Objective C 中,所有 BOOL 基本上都是短路(-127 到 128),零是“FALSE”或“NO”的唯一值。但是,当我最近尝试根据位掩码设置按钮的选定值时,它失败了。为什么?
NSInteger bitfield = 127;
NSInteger bitmask = 1 << 6; // 64
myButton.selected = bitfield & bitmask; // selected will remain NO
【问题讨论】:
-
不是我不相信你,而是我不相信你。虽然如果你这样做会激发更多的信心
myButton.selected = !!(bitfield & bitmask); -
@Havenard C 确实有
bool。 -
@HotLicks 你为什么不相信他?
BOOL不是bool,因此它不像真正的布尔值那样工作。 -
GoldenJoe,这样做:
NSLog(@"selected is %s", myButton.selected ? "YES" : "NO");。问题可能是selected的一些消费者反过来(并且有些不恰当地)对它进行&和|操作,而不是使用&&和||。 (或者做== YES等) -
UIControl有一个实例变量unsigned int selected:1。我的测试表明,为“选定”属性分配一个值只是将最低有效位分配给该位字段。例如,self.myButton.selected = 3; NSLog(@"%d", self.myButton.selected);打印1。
标签: ios objective-c bitmask