ホームページ  >  記事  >  バックエンド開発  >  Go でビットごとの操作を使用して、特定のロールがビットマスクに含まれているかどうかを確認するにはどうすればよいですか?

Go でビットごとの操作を使用して、特定のロールがビットマスクに含まれているかどうかを確認するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 20:16:03524ブラウズ

How do you check if a specific role is included in a bitmask using bitwise operations in Go?

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>

ビットマスキングとビットワイズ、または

定数 isAdmin、isHeadquards などは、ロールのビットマスクを表します。各ビットは特定の役割を表します。ビットマスクには、単一の 1 ビットを別の位置にシフトすることが含まれ、その結果、1 ビットが 1 つだけ含まれるビット パターンが生成されます。ビット単位の OR 演算 (|) はこれらのビット パターンを結合し、OR 演算に含まれるロールをアクティブにするマスクを作成します。

上の例では、ロールはビット単位の OR 演算子を使用して初期化されます:

<code class="go">var roles byte = isAdmin | canSeeFinancials | canSeeEurope</code>

これにより、isAdmin、canSeeFinancials、および canSeeEurope に対応する各ビットが 1 に設定されますが、他のビットは 0 のままです。

ビットごとの AND およびチェック ロール

式isAdmin&roles == isAdmin は、ロールに isAdmin ロールが含まれているかどうかを確認します。ビットごとの AND (&) は、入力ビット パターンの各ビットに対して論理 AND 演算を実行します。結果として得られるビット パターンは、両方の入力ビットが 1 である場合にのみ 1 ビットを持ちます。

この場合、isAdmin&roles は 1 ビットを 1 つだけ含むビット パターンを生成し、ロール内に isAdmin ロールが存在することを示します。この結果を isAdmin と比較すると、ロールに isAdmin が含まれていることを確認できます。

ビットごとの等価性と単一ロール

対照的に、roles == isAdmin という式は、ロールが isAdmin と等しいかどうかを確認します。 。これは、ロールに isAdmin ロールのみが含まれ、他のロールが含まれていない場合にのみ当てはまります。

したがって、 isAdmin&roles == isAdmin は、ロールに isAdmin ロールが含まれているかどうかをチェックし、一方、roles == isAdmin は、ロールが isAdmin ロールのみであるかどうかを厳密にチェックします。 .

以上がGo でビットごとの操作を使用して、特定のロールがビットマスクに含まれているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。