1

我正试图真正围绕这行代码:

[cardButton setTitle:card.contents
            forState:UIControlStateSelected|UIControlStateDisabled];

让我绊倒的是按位|。和普通的有什么区别|| 或?

为什么使用按位 | 与逻辑 ||?

(供参考,forState:UIControlStateSelected = 1 << 1; UIControlStateDisabled 1 << 2)

4

2 回答 2

3

按位OR与逻辑不同OR,它执行OR单个位的 s,并且不会短路。相反,逻辑OR总是产生1or 0,并且一旦明确它将得到什么答案(即一旦它在其参数链中找到第一个非零参数),它就会停止评估其参数。

特别是对于这种情况,1 << 1is binary101 << 2is binary 100,所以-OR将它们组合在一起会产生 binary110或 decimal 6。如果您使用逻辑OR代替,您将简单地得到1,因为第一个参数 ,1 << 1是非零的。

于 2013-05-05T17:41:18.153 回答
2

简而言之,按位运算对单个位执行逻辑运算,而逻辑运算对整个值执行。

在掩码的情况下,OR使用按位,因此您可以将多个值组合在一起。

例如(使用 16 位整数)

0000000000000010 UIControlStateSelected 
0000000000000100 UIControlStateDisabled
-----------------------------------------------------
0000000000000110 UIControlState Disabled and Selected

相反,逻辑评估将返回true,因为它们都是非零的

于 2013-05-05T17:41:57.043 回答