Golang位运算技巧大全
在Golang开发中,位运算有哪些实用的技巧可以提升代码性能?比如如何高效地进行标志位操作、快速乘除法或者优化内存使用?希望能分享一些实际应用场景和代码示例,特别是那些容易被忽略但很有用的技巧。
2 回复
Golang位运算常用技巧:
- 判断奇偶:
n & 1 == 1 - 乘/除2:
n << 1/n >> 1 - 交换两数:
a ^= b; b ^= a; a ^= b - 取反加1(补码):
^n + 1 - 判断2的幂:
n & (n-1) == 0 - 取最低位1:
n & -n - 移除最低位1:
n & (n-1)位运算高效简洁,适合底层优化。
更多关于Golang位运算技巧大全的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang 位运算技巧大全
基础位运算符
& // 按位与
| // 按位或
^ // 按位异或
&^ // 按位清除(AND NOT)
<< // 左移
>> // 右移
实用技巧
1. 判断奇偶性
func isEven(n int) bool {
return n&1 == 0
}
func isOdd(n int) bool {
return n&1 == 1
}
2. 交换两个数(不使用临时变量)
a, b = a^b, a^b
a = a ^ b
3. 判断是否为2的幂
func isPowerOfTwo(n int) bool {
return n > 0 && (n&(n-1)) == 0
}
4. 计算绝对值
func abs(n int) int {
mask := n >> 31
return (n + mask) ^ mask
}
5. 取模运算(对2的幂)
// n % 8
result := n & 7
6. 乘以/除以2的幂
// 乘以8
result := n << 3
// 除以8
result := n >> 3
7. 设置特定位
// 设置第3位(从0开始)
n |= 1 << 3
// 清除第3位
n &^= 1 << 3
// 切换第3位
n ^= 1 << 3
8. 检查特定位
// 检查第3位是否设置
if n&(1<<3) != 0 {
// 位已设置
}
9. 统计1的个数
func countBits(n int) int {
count := 0
for n != 0 {
n &= n - 1
count++
}
return count
}
10. 反转位
func reverseBits(n uint32) uint32 {
var result uint32
for i := 0; i < 32; i++ {
result = (result << 1) | (n & 1)
n >>= 1
}
return result
}
11. 找出单独出现的数字
// 数组中只有一个数字出现一次,其他都出现两次
func singleNumber(nums []int) int {
result := 0
for _, num := range nums {
result ^= num
}
return result
}
12. 掩码操作
const (
ReadPermission = 1 << iota
WritePermission
ExecutePermission
)
// 添加权限
permissions |= ReadPermission | WritePermission
// 检查权限
if permissions&ReadPermission != 0 {
// 有读权限
}
// 移除权限
permissions &^= WritePermission
这些技巧在算法优化、权限管理、数据压缩等场景中非常有用。位运算通常比算术运算更快,能够有效提升程序性能。

