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

DDD
リリース: 2024-11-06 17:06:02
オリジナル
301 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!