Go 的位运算符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| & | >> <<
a := 5 b := 3 result := a ^ b
a := 5 b := 3 result := a &^ b
|
Go语言的标准库中提供了一些与位运算相关的函数。以下是一些常用的函数:
bits.OnesCount:返回一个无符号整数的二进制表示中有多少个1。
1 2 3 4
| import "math/bits"
num := uint(5) // 二进制表示为 101 count := bits.OnesCount(num) // 结果为 2
|
如果我们自己实现这个 OnesCount 可以怎么做呢?
答案:
不停地 & 1 然后循环右移,如果 &1 后是1,说明末尾是1,则计数器++
bits.RotateLeft:将一个无符号整数的二进制表示向左循环移动指定的位数。
1 2 3 4 5
| import "math/bits"
num := uint(5) // 二进制表示为 101 shift := 2 rotated := bits.RotateLeft(num, shift) // 结果为 20(二进制为 10100)
|
bits.RotateRight:将一个无符号整数的二进制表示向右循环移动指定的位数。
1 2 3 4 5
| import "math/bits"
num := uint(5) // 二进制表示为 101 shift := 2 rotated := bits.RotateRight(num, shift) // 结果为 1(二进制为 1)
|
bits.Reverse:反转一个无符号整数的二进制表示。
1 2 3 4
| import "math/bits"
num := uint(5) // 二进制表示为 101 reversed := bits.Reverse(num) // 结果为 2684354560(二进制为 10100000000000000000000000000000)
|
这些函数可以在 math/bits 包中找到,并且提供了高效的位运算实现。在处理位级操作时,这些函数可以提供便利并且保证了跨平台的一致性。