为了账号安全,请及时绑定邮箱和手机立即绑定

go中unit32的反转位

go中unit32的反转位

Go
德玛西亚99 2022-06-13 16:14:29
我想将二进制数 1000 翻转为 0001。bits.reverse 函数似乎不起作用。问题是我从 GPIO 获取位。无论是 4 位还是 26 位,问题是它们的方向错误(1 = 1000, 2=0100 ...,也是 26 位)。谁能帮我?这是我的示例代码:package mainimport (  "fmt"  "math/bits")func main() {    var x uint32 = 0b1000    fmt.Printf("%04b\n", x)    fmt.Printf("%04b\n", bits.Reverse32(x))}
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超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:   1000

rev: 0001

x:   11000000000000000000010000

rev: 00001000000000000000000011


查看完整回答
反对 回复 2022-06-13
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

package main


import (

    "fmt"

    "math/bits"

)


func main() {

    var x uint32 = 0b1000

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

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

}


Input:  00000000000000000000000000001000

Output: 00010000000000000000000000000000

这应该有效。参考:https ://golang.org/pkg/math/bits/#Reverse32


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号