2014-09-26 1 views

답변

2

보다 일반적인 접근 방식을 뭔가 같은 :

// subset has to go from lowest to highest 
func bits(b uint, subset ...uint) (r uint) { 
    i := uint(0) 
    for _, v := range subset { 
     if b&(1<<v) > 0 { 
      r = r | 1<<uint(i) 
     } 
     i++ 
    } 
    return 
} 

func main() { 
    fmt.Println(bits(0x38, 5, 6, 7), "x", 0x38>>5) 
    fmt.Println(bits(0x38, 2, 4, 5)) 
    fmt.Println(bits(0x38, 1, 2, 3), "x", (0x38>>1)&7) 
} 

순차적 하위 집합의 경우 @ Guffa의 솔루션이 훨씬 빠릅니다.

+0

'bool'은 오타 였고 'uint8'이어야한다고 생각합니다. upvoted 비트 - 산술 체크 아웃 원인. – thwd

3

상위 비트를 얻으려면 당신은 당신이 그들을 이동할 수 있습니다 중간에 비트를 얻으려면 오른쪽으로

bits765 := b >> 5 

을 값으로 전환 할 수 있습니다 INT 될 것입니다 3,2,1 비트 또는과 다음 원하지 않는 비트 오프 마스크 : 것입니다 당신이 정렬되지 않은 비트를 선택할 수 있도록 할

bits321 := (b >> 1) & 7 
관련 문제