逐句讲解
Copy csharp
1if (boolValue)
2 buffer[offset] |= (byte)(1 << attr.Bit);
3else
4 buffer[offset] &= (byte)~(1 << attr.Bit);
5
详细理解
buffer[offset]:一个字节(byte),你准备操作其某一个bitattr.Bit:你要操作的是第几位(通常从0计:0~7)boolValue:你想写入该位的布尔值,true表示要设成1,false则设成0
情况一:boolValue == true
buffer[offset] |= (byte)(1 << attr.Bit);1 << attr.Bit只把目标bit置1|=(按位或):只要“某位有1,结果就是1”,即把目标bit位置成1,其它位不变
情况二:boolValue == false
buffer[offset] &= (byte)~(1 << attr.Bit);1 << attr.Bit只把目标bit置1~(1 << attr.Bit)反转,其它位全1,目标位0&=:只有两个数相同位都为1才为1。这样就把目标位清零,剩下位保持原样
记忆口诀
置1:或上掩码
任何位或1都变1,所以 |= 掩码让目标位变1
清0:与上反掩码
只目标位为0,余位1,所以 &= 反掩码让目标位变0
可用口令记忆:
- “要写1就‘或’掩码,要写0就‘与’反掩码”
图示说明
| 原值 | 掩码 | 操作 | 结果 |
|---|---|---|---|
| 0b 1011 0010 | 0b 0000 1000 | | = |
|
| 0b 1011 1010 | 0b 1111 0111 | &= |
0b 1011 0010 |
总结
- 置1(true):
|= (1 << n),或上掩码 - 清0(false):
&= ~(1 << n),与上反掩码
如果需要记得快,可以理解为:
- “或1得1,目标位置1;与0得0,目标位清零”
如需帮助记忆的思维导图或者图解,请告诉我!