C# program to convert decimal to binary

19 Nov 2017

C# contains a robust way to convert int, long to its binary representation using Convert.ToString(n, 2). It is more convenient to use & performant using native code implementation.

If you want an alternate way to do it through simple C# bit operation, then you can use the following suggested ToBinary(n) implementation. In most cases, this custom implementation is few ticks faster than the BCL implemenatation laughing. May be not, share your views.

Source code provided below;

using System;

namespace CompProg.Algorithm.BIT
{
    public class ConvertDecimal2Binary
    {
        static string ToBinaryBCL(int n) => Convert.ToString(n, 2);

        static string ToBinary(int n)
        {
            int j = 0;
            char[] output = new char[32];

            if (n == 0)
                output[j++] = '0';
            else
            {
                int checkBit = 1 << 30;
                bool skipInitialZeros = true;
                // Check the sign bit separately, as 1<<31 will cause
                // +ve integer overflow
                if ((n & int.MinValue) == int.MinValue)
                {
                    output[j++] = '1';
                    skipInitialZeros = false;
                }

                for (int i = 0; i < 31; i++, checkBit >>= 1)
                {
                    if ((n & checkBit) == 0)
                    {
                        if (skipInitialZeros)
                            continue;
                        else
                            output[j++] = '0';
                    }
                    else
                    {
                        skipInitialZeros = false;
                        output[j++] = '1';
                    }
                }
            }

            return new string(output, 0, j);
        }

        static void Main(string[] args)
        {
            int[] test = { int.MaxValue, int.MaxValue - 1, 1000000, 8888, 88, 99, 1, -0, -1, -2, int.MinValue + 100000, int.MinValue + 100, int.MinValue + 1, int.MinValue };
            foreach (var n in test)
            {
                Console.WriteLine("Calculate for i = " + n);
                var watch = System.Diagnostics.Stopwatch.StartNew();
                Console.WriteLine("BCL: " + ToBinaryBCL(n));
                watch.Stop();

                watch.Restart();
                Console.WriteLine("Cus: " + ToBinary(n) + Environment.NewLine);
                watch.Stop();
            }

            //// Unit Test
            //for (int i = int.MaxValue, j; i >= 0; i--)
            //{
            //    j = -1 * i;
            //    if (!ToBinary(i).Equals(ToBinaryBCL(i)))
            //    {
            //        Console.WriteLine("Failed at i = " + i);
            //        break;
            //    }
            //    if (!ToBinary(j).Equals(ToBinaryBCL(j)))
            //    {
            //        Console.WriteLine("Failed at j = " + j);
            //        break;
            //    }
            //}
        }
    }
}