No es demasiado difícil de resolver con un trazador de líneas, pero en realidad hay una solución de biblioteca estándar.
#include <bitset>
#include <algorithm>
std::vector<int> get_bits(unsigned long x) {
std::string chars(std::bitset< sizeof(long) * CHAR_BIT >(x)
.to_string< char, std::char_traits<char>, std::allocator<char> >());
std::transform(chars.begin(), chars.end(),
std::bind2nd(std::minus<char>(), '0'));
return std::vector<int>(chars.begin(), chars.end());
}
C++ 0x incluso lo hace más fácil!
#include <bitset>
std::vector<int> get_bits(unsigned long x) {
std::string chars(std::bitset< sizeof(long) * CHAR_BIT >(x)
.to_string(char(0), char(1)));
return std::vector<int>(chars.begin(), chars.end());
}
Este es uno de los rincones más extraños de la biblioteca. Tal vez en realidad lo que estaban manejando era la serialización.
cout << bitset<8>(x) << endl; // print 8 low-order bits of x
Creo que te refieres a _bit_ representation. – fbrereto
¿Es esta tarea? – fbrereto
Dado que un número entero es de tamaño fijo, ¿por qué no simplemente usar una matriz simple? –