作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在给定输入索引的情况下,构造翻转单个位位域的最有效方法是什么?
例如:
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/
我是一名优秀的程序员,十分优秀!