C#二进制文字

示例

0B前缀,可以用来表示二进制文字。

二进制文字允许从零和一构造数字,这使得查看数字的二进制表示形式中设置的位变得更加容易。这对于使用二进制标志很有用。

以下是指定intwith值34(= 2 5 + 2 1)的等效方法:

// 使用二进制文字:
//   位数:76543210
int a1 = 0b00100010;          // 二进制:明确指定位

// 现有方法:
int a2 = 0x22;                // 十六进制:每个数字对应于4位
int a3 = 34;                  // 十进制:很难看到设置了哪些位
int a4 = (1 << 5) | (1 << 1); // 按位算术:组合非零位

标志枚举

以前,enum只能使用以下示例中的三种方法之一来指定an的标志值:

[Flags]
public enum DaysOfWeek
{
    // 先前可用的方法:
    //          十进制十六进制位移
    Monday    =  1,    //    = 0x01    = 1 << 0
    Tuesday   =  2,    //    = 0x02    = 1 << 1
    Wednesday =  4,    //    = 0x04    = 1 << 2
    Thursday  =  8,    //    = 0x08    = 1 << 3
    Friday    = 16,    //    = 0x10    = 1 << 4
    Saturday  = 32,    //    = 0x20    = 1 << 5
    Sunday    = 64,    //    = 0x40    = 1 << 6

    Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
    Weekends = Saturday | Sunday
}

使用二进制文字,更明显的是设置了哪些位,使用它们不需要了解十六进制数字和按位算术:

[Flags]
public enum DaysOfWeek
{
    Monday    = 0b00000001,
    Tuesday   = 0b00000010,
    Wednesday = 0b00000100,
    Thursday  = 0b00001000,
    Friday    = 0b00010000,
    Saturday  = 0b00100000,
    Sunday    = 0b01000000,

    Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
    Weekends = Saturday | Sunday
}