Go でバイトからビットを取得する
Go でバイトから個々のビットを抽出するには、考慮すべきアプローチがいくつかあります。
視覚的表現:
ビットの視覚的表現の場合、fmt.Sprintf(" b", ...) を使用してバイトをバイナリ形式で出力できます。 .
ビット単位の演算:
ただし、ハミング距離の計算などの演算にビットを使用する必要がある場合は、ビット単位の演算子を使用する必要があります。
バイトの n 番目のビットを取得するには、n 番目のビットが 1 に設定され、残りが 0 (つまり 2 の累乗) に設定されたマスクを使用して、バイトとビット単位の AND を演算します。たとえば、バイト 13 (00001101) の最初のビットを見つけるには、1 (00000001) でマスクします。ビットごとの AND の結果がマスクと等しい場合、n 番目のビットは 1 になります。
コード例:
<code class="go">fmt.Print(13 & 1) // Output: 1 (1st bit) fmt.Print(13 & 2) // Output: 0 (2nd bit) fmt.Print(13 & 4) // Output: 4 (3rd bit) fmt.Print(13 & 8) // Output: 8 (4th bit)</code>
ハミング距離の計算:
2 バイト間のハミング距離を計算するには、ビット単位の AND 演算を使用して対応するビットを比較します。結果のビットが 1 の場合、ビットが異なることを示し、距離カウントをインクリメントします。
<code class="go">diff := 0 mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ }</code>
ハミング距離の関数:
これは2 つのバイト配列間のハミング距離を計算する関数の例:
<code class="go">func hamming(a, b []byte) (int, error) { ... for j := 0; j < 8; j++ { mask := byte(1 << uint(j)) if (b1 & mask) != (b2 & mask) { diff++ } } ... }</code>
この関数は、配列内の対応するバイトのビットを比較し、異なるビットごとに距離カウントを増分します。
以上がGoでバイトから個々のビットを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。