理解Go 中的位元遮罩和位元運算
位元遮罩和位元運算是電腦程式設計中的基本概念,允許在二進位等級操作資料。在此範例中,我們探討Go 中的以下概念:
<code class="go">package main import ( "fmt" ) const ( isAdmin = 1 << iota isHeadquarters canSeeFinancials canSeeAfrica canSeeAsia canSeeEurope canSeeNorthAmerica canSeeSouthAmerica ) func main() { var roles byte = isAdmin | canSeeFinancials | canSeeEurope fmt.Printf("%b\n", roles) fmt.Printf("Is Admin? %v\n", isAdmin&roles == isAdmin) }</code>
位元遮罩與位元OR
常數isAdmin、isHeadquarters 等,表示角色位元掩碼,其中每個位元代表一個特定的角色。位元遮罩涉及將單一 1 位元位元到不同的位置,產生只有一個 1 位元的位元模式。位元 OR 運算 (|) 組合這些位元模式,建立一個遮罩來啟動 OR 運算中包含的任何角色。
在上面的範例中,角色是使用位元OR 運算子初始化的:
<code class="go">var roles byte = isAdmin | canSeeFinancials | canSeeEurope</code>
這會將isAdmin、canSeeFinancials 和canSeeEurope 對應的每個位元設為1,而每個位元都設為1,而每個位元都設為1,而每個位元都設為1,而每個位元都設為1其他位保持為0。
位元 AND 和檢查角色
表達式isAdmin&roles == isAdmin 檢查角色是否包含 isAdmin 角色。位元與 (&) 對輸入位元模式的每一位執行邏輯與運算。只有當兩個輸入位元均為 1 時,產生的位元模式才具有 1 位元。
在這種情況下,isAdmin&roles 會產生只有一個 1 位元的位元模式,指示角色中存在 isAdmin 角色。將此結果與 isAdmin 進行比較,確保 Roles 包含 isAdmin。
位元相等且單一角色
相反,表達式 Roles == isAdmin 檢查 Roles 是否等於 isAdmin 。只有當 Roles 只包含 isAdmin 角色且不包含其他角色時,才會發生這種情況。
因此, isAdmin&roles == isAdmin 檢查 Roles 是否包含 isAdmin 角色,而 Roles == isAdmin 嚴格檢查 Roles 是否僅包含 isAdmin 角色.
以上是如何使用 Go 中的位元運算檢查特定角色是否包含在位元遮罩中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!