How to reverse the bits of a number in Go

1 Answer

0 votes
package main

import (
    "fmt"
    "strings"
)

// ReverseBits reverses exactly 32 bits of a uint32
func ReverseBits(n uint32) uint32 {
    bin := fmt.Sprintf("%032b", n)
    runes := []rune(bin)

    // reverse the slice
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }

    var result uint32
    fmt.Sscanf(string(runes), "%b", &result)
    
    return result
}

// Bits formats a uint32 into 4 groups of 8 bits
func Bits(n uint32) string {
    bin := fmt.Sprintf("%032b", n)
    parts := []string{
        bin[0:8],
        bin[8:16],
        bin[16:24],
        bin[24:32],
    }
    
    return strings.Join(parts, " ")
}

func main() {
    a := uint32(19)
    b := uint32(3)

    ra := ReverseBits(a)
    rb := ReverseBits(b)

    fmt.Println("Original 19:", Bits(a))
    fmt.Println("Reversed 19:", Bits(ra))
    fmt.Println()
    fmt.Println("Original 3: ", Bits(b))
    fmt.Println("Reversed 3: ", Bits(rb))
}


/*
run:

Original 19: 00000000 00000000 00000000 00010011
Reversed 19: 11001000 00000000 00000000 00000000

Original 3:  00000000 00000000 00000000 00000011
Reversed 3:  11000000 00000000 00000000 00000000

*/

 



answered Apr 4 by avibootz
...