Nico
Published on 2025-06-26 / 8 Visits
0
0

C# 位操作

#C#

逐句讲解

Copy csharp

1if (boolValue)
2    buffer[offset] |= (byte)(1 << attr.Bit);
3else
4    buffer[offset] &= (byte)~(1 << attr.Bit);
5

详细理解

  • buffer[offset]:一个字节(byte),你准备操作其某一个bit
  • attr.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,目标位清零”

如需帮助记忆的思维导图或者图解,请告诉我!


Comment