簡體   English   中英

了解Objective-C中的位掩碼的按位求值

[英]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總是產生10 ,並且一旦知道要得到什么答案(即,一旦找到其參數鏈中的第一個非零參數),它就會停止評估其參數。 )。

專門針對這種情況, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM