[Source Code]

#include <iostream>
#include <string>

typedef unsigned int uint32;

std::string tobin(int significand)
{
  std::string res = (significand == 0) ? "1" : "1.";
  int mask = 0x00400000;
  while (significand != 0)
  {
    if (significand & mask)
      res += "1";
    else
      res += "0";
    significand &= ~mask;
    mask >>= 1;
  }
  return res;
}

void writeFloat(float f)
{
  uint32 u;
  int    sign;
  int    exponent;
  int    significand;

  //
  // Extract bits
  // 
  u = *(uint32*)&f;

  //
  // Extract sign
  //
  sign = (u & 0x80000000) >> 31;     //  1 bit

  //
  // Extract exponent
  //
  exponent = (u & 0x7F800000) >> 23; //  8 bit
  exponent -= 127;                   // exponent bias

  //
  // Extract significand
  //
  significand = (u & 0x007FFFFF);    // 23 bit
  //significand |= 0x00800000;         // implicit leading bit with value 1

  std::cout << f << " = " <<( (sign == 0) ? " " : "-" ) << "2^" << exponent << " * " << tobin(significand) << "(b)" << std::endl;
}

int main()
{
  float f;
  while (true)
  {
    std::cin >> f;
    writeFloat(f);
    if (f == 0) break;
  }
  return 0;
}



[Result]

1 =  2^0 * 1(b)

2 =  2^1 * 1(b)

3 =  2^1 * 1.1(b)

4 =  2^2 * 1(b)

5 =  2^2 * 1.01(b)

6 =  2^2 * 1.1(b)

7 =  2^2 * 1.11(b)

8 =  2^3 * 1(b)

9 =  2^3 * 1.001(b)

10 =  2^3 * 1.01(b)


-1 = -2^0 * 1(b)

-2 = -2^1 * 1(b)

-3 = -2^1 * 1.1(b)

-4 = -2^2 * 1(b)

-5 = -2^2 * 1.01(b)

-6 = -2^2 * 1.1(b)

-7 = -2^2 * 1.11(b)

-8 = -2^3 * 1(b)

-9 = -2^3 * 1.001(b)

-10 = -2^3 * 1.01(b)


1 =  2^0 * 1(b)

2 =  2^1 * 1(b)

4 =  2^2 * 1(b)

8 =  2^3 * 1(b)

16 =  2^4 * 1(b)

32 =  2^5 * 1(b)

64 =  2^6 * 1(b)

128 =  2^7 * 1(b)

256 =  2^8 * 1(b)


0.5 =  2^-1 * 1(b)

0.25 =  2^-2 * 1(b)

0.125 =  2^-3 * 1(b)

0.0625 =  2^-4 * 1(b)

0.03125 =  2^-5 * 1(b)

0.015625 =  2^-6 * 1(b)

0.0078125 =  2^-7 * 1(b)

0.00390625 =  2^-8 * 1(b)


0.1 =  2^-4 * 1.10011001100110011001101(b)

0.2 =  2^-3 * 1.10011001100110011001101(b)

0.3 =  2^-2 * 1.0011001100110011001101(b)

0.4 =  2^-2 * 1.10011001100110011001101(b)

0.5 =  2^-1 * 1(b)

0.6 =  2^-1 * 1.0011001100110011001101(b)

0.7 =  2^-1 * 1.01100110011001100110011(b)

0.8 =  2^-1 * 1.10011001100110011001101(b)

0.9 =  2^-1 * 1.1100110011001100110011(b)


69.8 =  2^6 * 1.0001011100110011001101(b)

0 =  2^-127 * 1(b)



[Download]

float_test.zip