猿问

go中unit32的反转位

我想将二进制数 1000 翻转为 0001。bits.reverse 函数似乎不起作用。


问题是我从 GPIO 获取位。无论是 4 位还是 26 位,问题是它们的方向错误(1 = 1000, 2=0100 ...,也是 26 位)。


谁能帮我?


这是我的示例代码:


package main


import (

  "fmt"

  "math/bits"

)


func main() {

    var x uint32 = 0b1000

    fmt.Printf("%04b\n", x)

    fmt.Printf("%04b\n", bits.Reverse32(x))

}


德玛西亚99
浏览 196回答 2
2回答

拉风的咖菲猫

用于bits.Reverse32()反转 32 位数字的位,但由于您的“有用”位小于 32,因此您必须将结果与“无用”位的数量一起右移。例如,如果您有 4 个有用位,则在反转这 4 个位后,将转到最高 4 位,因此右移32-4 = 28.捕获此逻辑的函数:func reverse(x uint32, size uint32) uint32 {    return bits.Reverse32(x) >> (32 - size)}测试它的示例:x := uint32(0b1000)fmt.Printf("x:   %04b\n", x)fmt.Printf("rev: %04b\n", reverse(x, 4))x = uint32(0x3000010)fmt.Printf("x:   %026b\n", x)fmt.Printf("rev: %026b\n", reverse(x, 26))输出(在Go Playground上试试):x:   1000rev: 0001x:   11000000000000000000010000rev: 00001000000000000000000011

蝴蝶刀刀

package mainimport (    "fmt"    "math/bits")func main() {    var x uint32 = 0b1000    fmt.Printf("%032b\n", x)    fmt.Printf("%032b\n", bits.Reverse32(x))}Input:  00000000000000000000000000001000Output: 00010000000000000000000000000000这应该有效。参考:https ://golang.org/pkg/math/bits/#Reverse32
随时随地看视频慕课网APP

相关分类

Go
我要回答