bits-and-blooms/bitset

DumpAsBits outputs reversed bit string

comunidadio opened this issue · 1 comments

package main

import (
	"fmt"

	"github.com/bits-and-blooms/bitset"
)

func main() {
	bs := bitset.New(128)
	bs.Set(1)
	bs.Set(10)
	bs.Set(90)
	fmt.Println(bs.DumpAsBits())
}

Outputs:
0000000000000000000000000000000000000100000000000000000000000000.0000000000000000000000000000000000000000000000000000010000000010.

Expected:
0100000000010000000000000000000000000000000000000000000000000000.0000000000000000000000000010000000000000000000000000000000000000.

lemire commented

The convention in Go, as in most programming languages, is that the least significant bits appear at the end.

E.g., if you set the bit at index 0, a 1 will appear at the last position:

package main

import (
	"fmt"
)

func main() {
	n := int64(1)
	fmt.Printf("%064b", n)
}

Prints:

0000000000000000000000000000000000000000000000000000000000000001

If you want to reverse a string, it is relatively easy to do so in Go:

func Reverse(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}