static string strToBinStr(string s) {
var result = long.Parse(s);
return Convert.ToString(result, 2);
static string getFrac(double frac, int bits) {
while(frac != 0 && bits > 0) {
static void shiftPointLeft(ref string integer, ref string fraction) {
var last = integer[integer.Length - 1];
integer = integer.Remove(integer.Length - 1, 1);
fraction = last + fraction;
static void shiftPointRight(ref string integer, ref string fraction) {
fraction = fraction.Remove(0, 1);
integer = integer + first;
static int normalize(ref string integer, ref string fraction, int expBias) {
while( !integer.Contains("1") ) {
shiftPointRight(ref integer, ref fraction);
int intDigits = integer.Length;
for(int i = 1; i < intDigits; i++) {
shiftPointLeft(ref integer, ref fraction);
public static void Main()
Console.Write("Enter your number:");
var num = Console.ReadLine().Trim();
bool sign = num[0] == '-';
num = num.Insert(0, "0");
if(num[num.Length -1] == '.') {
var fields = num.Split('.');
Console.WriteLine("Parsing: " + fields[0] + " . " + fields[1]);
var fraction = getFrac(double.Parse("." + fields[1]), 23);
var integer = fields[0].Length == 0 ? "0" : strToBinStr(fields[0]);
var signBit = sign ? "1" : "0";
Console.WriteLine("Sign?: " + sign);
Console.WriteLine("Integer part: " + integer + ", Fraction part: " + fraction);
Console.WriteLine("32 bit float: ");
var exp = normalize( ref integer, ref fraction, 127);
var expStr = Convert.ToString(exp, 2).PadLeft(8, '0');
Console.Write(signBit + "-" + expStr + "-" + fraction.PadRight(23, '0'));