```
#include <iostream>

using namespace std;

template<class T>
void toBinary(T num) 
{
  char *  numi = reinterpret_cast<char*>(&num);

  for (int i = 1; i <= sizeof(T); i++)  
  {
      for( int j = 1 ; j <= 8; ++j )
      {
          char byte = numi[i];
          cout << ( byte & j  ? 1 :  0);    
      }
  }
  cout << endl << endl;
}

int main() 
{   
  toBinary(1); 
  std::cin.get();
}

```

the output is 0000000000000...
Could you tell me where is my mistake ? 

EDIT:

```
#include <iostream>
#include <bitset>
#include <iomanip>
#include <boost/format.hpp>
using namespace std;

template<class T> bitset<sizeof(T)*CHAR_BIT> toBinary(const T num) 
{
    bitset<sizeof(T)*CHAR_BIT> mybits;
    const char * const p = reinterpret_cast<const char*>(&num);
    for (int i = sizeof(T)*CHAR_BIT-1 ; i >= 0 ; --i)
        mybits.set(i, (*(p)&(1<<i)));
    return mybits;
}

template<class T> void printBinary(T num, ostream& stream = cout)
{
    stream << boost::format("%-35s %-8s %-32s\n")  %  typeid(T).name() % num % toBinary(num).to_string();
}

struct Foo{void bar(){}};

int main() 
{   
  printBinary(-8);
  printBinary(8u);
  printBinary('a');
  printBinary(8.2f);  
  printBinary("Overflow");
  printBinary(main);
  printBinary(&Foo::bar);
  printBinary(8.2);
  std::cin.get();
}

```