>  기사  >  백엔드 개발  >  Go에서 바이트 값의 비트 표현을 어떻게 추출할 수 있나요?

Go에서 바이트 값의 비트 표현을 어떻게 추출할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-04 17:46:02440검색

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<0 = 1 (00000001):

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

결과는 1이며 첫 번째 비트가 1임을 나타냅니다.

Hamming Distance Function

두 바이트 측정값 사이의 Hamming 거리 다양한 비트의 수. 다음은 두 바이트 배열(주어진 시나리오에서는 단일 바이트 배열) 사이의 해밍 거리를 계산하는 함수입니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.