Отображение битов в int - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь отобразить битовые позиции массива uint64 в массив int (см. Ниже). BitSet - это [] uint64. Ниже приведен мой код в настоящее время настройки. Но мне интересно, может ли быть функция std в golang, которая может уменьшить этот код. На другом языке есть BitArray или другие объекты, которые значительно облегчают жизнь.

Итак, на Голанге, мы должны закодировать это? Есть ли лучше сделать это?

// Indexes the index positions of '1' bits as an int array
func (b BitSet) Indexes() []int {
    // set up masks for bit ANDing
    masks := make([]uint64, _BitsPerUint64)
    for i := 0; i < _BitsPerUint64; i++ {
        masks[i] = (1 << uint(i))
    }
    // iterate bitset
    indexes := make([]int, 0, len(b)*4)
    for i := 0; i < len(b); i++ {
        for m := 0; m < _BitsPerUint64; m++ {
            if masks[m]&b[i] > 0 {
                indexes = append(indexes, i*_BitsPerUint64+m)
            }
        }
    }
    return indexes
}

1 Ответ

0 голосов
/ 24 января 2019
func (b BitSet) Indexes() []int {
    retval := make([]int, 0, len(b)*64)
    for idx, value := range b {
        for i := 0; i < 64; i++ {
            if value & (1<<uint(i)) != 0 {
                retval = append(retval, idx*64 + i)
            }
        }
    }
    return retval
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...