ホームページ  >  記事  >  バックエンド開発  >  Goでバイトから個々のビットを抽出するにはどうすればよいですか?

Goでバイトから個々のビットを抽出するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-06 17:06:02301ブラウズ

How to Extract Individual Bits from a Byte in Go?

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

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