我正试图真正围绕这行代码:
[cardButton setTitle:card.contents
forState:UIControlStateSelected|UIControlStateDisabled];
让我绊倒的是按位|。和普通的有什么区别|| 或?
为什么使用按位 | 与逻辑 ||?
(供参考,forState:UIControlStateSelected = 1 << 1; UIControlStateDisabled 1 << 2)
我正试图真正围绕这行代码:
[cardButton setTitle:card.contents
forState:UIControlStateSelected|UIControlStateDisabled];
让我绊倒的是按位|。和普通的有什么区别|| 或?
为什么使用按位 | 与逻辑 ||?
(供参考,forState:UIControlStateSelected = 1 << 1; UIControlStateDisabled 1 << 2)
按位OR
与逻辑不同OR
,它执行OR
单个位的 s,并且不会短路。相反,逻辑OR
总是产生1
or 0
,并且一旦明确它将得到什么答案(即一旦它在其参数链中找到第一个非零参数),它就会停止评估其参数。
特别是对于这种情况,1 << 1
is binary10
和1 << 2
is binary 100
,所以-OR
将它们组合在一起会产生 binary110
或 decimal 6
。如果您使用逻辑OR
代替,您将简单地得到1
,因为第一个参数 ,1 << 1
是非零的。
简而言之,按位运算对单个位执行逻辑运算,而逻辑运算对整个值执行。
在掩码的情况下,OR
使用按位,因此您可以将多个值组合在一起。
例如(使用 16 位整数)
0000000000000010 UIControlStateSelected
0000000000000100 UIControlStateDisabled
-----------------------------------------------------
0000000000000110 UIControlState Disabled and Selected
相反,逻辑评估将返回true
,因为它们都是非零的