Converting an int to a binary string in C#

The .NET Framework has a built in overload of Convert.ToString which takes 2 parameters: the int you want to convert and an int of the base you want to convert to. Utilizing this with base 2, you can print out the string representation of a number in binary, like so:

var binary = Convert.ToString(5, 2); //Gives you "101"    

Now this is all fine and dandy, but you didn’t learn anything. (Or maybe you did. I don’t know. But you can learn some more so keep reading). For fun, let’s pretend that .NET didn’t have this method built in. How would you convert your number to it’s binary representation?

We can use a combination of bit shifting and logical AND’s to achieve this. If you logical AND a number with 1, that will give the value 1 or 0 depending on the value of the bit in the first position:

& 0001 (The number 1 in binary)

As we bit shift, 0’s are brought in from the left and the rightmost bit is dropped off and lost. If we bit shift the number to the right and then AND it with 1 again, we’ll get the result of the second bit.

& 0001

If we loop and continue to bit shift until the number is 0 we can build the entire binary string.

Example: Say we have the number 9, which in binary is 1001. Here’s the breakdown:

Number In Binary AND Result String
9 1001 1 1
4 0100 0 01
2 0010 0 001
1 0001 1 1001
0 0000 N/A (number is 0 so we’re done!) 1001
Now, in C#, to perform a right bit shift we use the `>>` operator, and to perform a logical AND we use the `&` operator. Here’s the code:
public string IntToBinaryString(int number)
    const int mask = 1;
    var binary = string.Empty;
    while(number > 0)
        // Logical AND the number and prepend it to the result string
        binary = (number & mask) + binary;
        number = number >> 1;

    return binary;

If you would like to print the string with a specific bit length, you can use the PadLeft method in the .NET Framework. it will prepend the specified number of a character of your choosing to your string:

binary = "1001";
binary = binary.PadLeft(8, '0');
// binary is now "00001001";