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 サイトの他の関連記事を参照してください。