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

Go でバイト値のビット表現を抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 17:46:02438ブラウズ

How can I extract the bit representation of a byte value in Go?

Go でバイトからビット表現を抽出する

Go でバイト値を操作する場合、多くの場合、個々のビットを操作する必要があります。この記事では、バイトからビット表現を抽出する方法を検討し、バイト値 1 のビット表現を決定するという特定の課題に対処します。

ビット表現

バイト内のビットを視覚的に表現するには、次のようにします。他の人が提案しているように、 fmt.Sprintf(" b", ...) を使用できます。ただし、ビットを含む数学演算の場合、ビット単位の演算子が不可欠です。

バイトの n 番目 ビットを決定するには、バイトと次のバイトの間でビット単位の AND 演算 (&) を実行します。 n番目ビットは 1 (マスク) に設定されます。このマスクは 2n-1 として計算されます。

例: 最初のビットの計算

数値 13 (00001101) の最初のビットを見つけるには、それをマスクします。 2で= 1 (00000001):

fmt.Print(13 & 1) // Output: 1

結果は 1 で、最初のビットが 1 であることを示します。

ハミング距離関数

2 バイト間のハミング距離を測定します。異なるビットの数。次に、2 つのバイト配列 (指定されたシナリオではシングルバイト配列) 間のハミング距離を計算する関数を示します。

func hamming(a, b []byte) (int, error) {
    if len(a) != len(b) {
        return 0, errors.New("a b are not the same length")
    }

    diff := 0
    for i := 0; i < len(a); i++ {
        b1 := a[i]
        b2 := b[i]
        for j := 0; j < 8; j++ {
            mask := byte(1 << uint(j))
            if (b1 & mask) != (b2 & mask) {
                diff++
            }
        }
    }
    return diff, nil
}

この関数は、ビット単位の AND 演算を使用して、バイト配列の対応するビットを比較します。 Go Playground はその使用法を示しています:

https://play.golang.org/p/O1EGdzDYAn

以上がGo でバイト値のビット表現を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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