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

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
- 2 回答
- 0 关注
- 195 浏览
添加回答
举报