[英]Understanding bitwise evaluation of a bitmask in Objective-C
我正在努力使我的頭完全圍繞以下代碼行:
[cardButton setTitle:card.contents
forState:UIControlStateSelected|UIControlStateDisabled];
使我絆倒的是按位|。 與普通||有何不同? 或
為什么使用按位| 與邏輯||?
(供參考,forState:UIControlStateSelected = 1 << 1; UIControlStateDisabled 1 << 2)
逐位OR
是從不同的邏輯OR
,它執行OR
各個位的S,並且不短路。 相反,邏輯OR
總是產生1
或0
,並且一旦知道要得到什么答案(即,一旦找到其參數鏈中的第一個非零參數),它就會停止評估其參數。 )。
專門針對這種情況, 1 << 1
是二進制10
,而1 << 2
是二進制100
,因此將它們進行OR
會產生二進制110
或十進制6
。 如果您使用的是邏輯OR
,則只會得到1
,因為第一個參數1 << 1
非零。
簡而言之,按位運算對單個位執行邏輯運算,而邏輯運算對整個值起作用。
對於掩碼,使用按位OR
,以便您可以在一個值中組合多個值。
例如(使用16位整數)
0000000000000010 UIControlStateSelected
0000000000000100 UIControlStateDisabled
-----------------------------------------------------
0000000000000110 UIControlState Disabled and Selected
邏輯評估會返回true
因為它們都不為零
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.