問題を理解する
この質問には課題があります: バイトが与えられた場合、その個々のビットをどのように抽出できるでしょうか?この操作は、バイト間のハミング距離の計算などのタスクに不可欠です。
Go でのビット操作
Go は、ビットを操作するためのさまざまなビット単位の演算子を提供します。ビットを抽出する鍵は、ビットごとの AND 演算子 (&) を使用することにあります。
特定のメソッド
バイトの n 番目のビットを取得するには、次のマスクを使用します。は数値 2(n-1) です。たとえば、byte(1) の最初のビットを取得するには、マスク 20 (byte(1)) を使用します。次に、ビット単位の AND 演算を実行します。
<code class="go">result = byte(1) & byte(1) // Output: 1</code>
結果がマスクと等しい場合は、ビットが 1 であることを意味します。それ以外の場合は 0 です。
例: ハミング距離の計算
2 つのバイト配列間のハミング距離を計算するサンプル関数を次に示します。
<code class="go">func hamming(a, b []byte) (int, error) { diff := 0 for i := 0; i < len(a); i++ { for j := 0; j < 8; j++ { mask := byte(1 << uint(j)) if (a[i] & mask) != (b[i] & mask) { diff++ } } } return diff, nil }</code>
この関数は、ビット操作を使用して 2 バイト間の個々のビットを比較することにより、ハミング距離を効率的に計算します。
以上がGo でバイトから個々のビットを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。