gpt4 book ai didi

go - 如何使用索引构造翻转的单个位位域?

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:39 24 4
gpt4 key购买 nike

在给定输入索引的情况下,构造翻转单个位位域的最有效方法是什么?

例如:

input: 0 output: 100000000000
input: 1 output: 010000000000
input: 2 output: 001000000000
input: 9 output: 000000000100

最佳答案

您正在寻找 right shift operator , 它将其左操作数中的每一位向右移动右操作数指定的次数。

x >> y // Shifts each bit in "x" to the right "y" times.

要像您的示例中那样显示位域,您需要使用仅设置最左边位的左操作数,然后向右移动给定的次数,并使用 %b printf 指令获取二进制字符串,例如 ( Go Playground ):

func setbit16(idx uint8) string {
return fmt.Sprintf("%016b", uint16(0x8000)>>idx)
}

func main() {
xs := []uint8{0, 1, 2, 9, 15, 20}
for _, x := range xs {
fmt.Printf("%2d -> %q\n", x, setbit16(x))
}
// 0 -> "1000000000000000"
// 1 -> "0100000000000000"
// 2 -> "0010000000000000"
// 9 -> "0000000001000000"
// 15 -> "0000000000000001"
// 20 -> "0000000000000000"
}

当然,如果您只想要结果数字而不一定要显示位域,那么您可以只使用运算符(或左移版本):

uint16(0x8000) >> 2 // => 0b0010000000000000
uint16(0x0001) << 2 // => 0b0000000000000100

关于go - 如何使用索引构造翻转的单个位位域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52336717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com