2進数表示

JavaのInteger#toString()みたいに、基数を指定して文字列に変換ってないのかなー。

#include <iostream>

template<class T>
void println_binary(T x) {
  static const char * const table[] = {
    "0000", "0001", "0010", "0011",
    "0100", "0101", "0110", "0111",
    "1000", "1001", "1010", "1011",
    "1100", "1101", "1110", "1111",
  };

  int i = sizeof(T) * 2 - 1;
  char *delimiter = "";

  for (; i >= 0; i--) {
    int n = (x >> (4 * i)) & 0xF;
    std::cout << delimiter << table[n];
    delimiter = " ";
  }

  std::cout << std::endl;
}

int main() {
  println_binary(~0);
  println_binary(0);
  println_binary(65535);
  println_binary(255);
  println_binary(16);
  println_binary(15);
  println_binary(15LL);
  return 0;
}


1111 1111 1111 1111 1111 1111 1111 1111
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 1111 1111 1111 1111
0000 0000 0000 0000 0000 0000 1111 1111
0000 0000 0000 0000 0000 0000 0001 0000
0000 0000 0000 0000 0000 0000 0000 1111
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111
続行するには何かキーを押してください . . .