背景
Go语言中,使用某int类型变量的二进制形式中的不同bit位来表示状态,如 6的二进制为110,第1个bit位值为0,第二个和第三个bit位值为1,用1和0来分别表示不同的状态。
需求
根据传入的bit位和状态值(0或1)来变更某个bit位的值。
方法
使用位运算中的左移(<<)、右移(>>)和按位取反(^)来实现。
案例
a = 2,二进制为10
将第1个bit位的值变为1
即 10 -> 11
// 定义位移参数
number = 1
// 1左移,然后与a做或运算
a |= (1<<(number-1))
将第2个bit位的值变为0
即 10 -> 00
// 定义位移参数
number = 2
// 1左移,然后取反,再与a做与运算
a &= ^(1<<(number-1))