# C# Language Binary literals

## Example

The 0b prefix can be used to represent Binary literals.

Binary literals allow constructing numbers from zeroes and ones, which makes seeing which bits are set in the binary representation of a number much easier. This can be useful for working with binary flags.

The following are equivalent ways of specifying an `int` with value `34` (=25 + 21):

``````// Using a binary literal:
//   bits: 76543210
int a1 = 0b00100010;          // binary: explicitly specify bits

// Existing methods:
int a2 = 0x22;                // hexadecimal: every digit corresponds to 4 bits
int a3 = 34;                  // decimal: hard to visualise which bits are set
int a4 = (1 << 5) | (1 << 1); // bitwise arithmetic: combining non-zero bits
``````

# Flags enumerations

Before, specifying flag values for an `enum` could only be done using one of the three methods in this example:

``````[Flags]
public enum DaysOfWeek
{
// Previously available methods:
//          decimal        hex       bit shifting
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
}
``````

With binary literals it is more obvious which bits are set, and using them does not require understanding hexadecimal numbers and bitwise arithmetic:

``````[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
}
`````` PDF - Download C# Language for free