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
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;
// }
//}
}
}
}