Редактировать: Как отмечают люди более опытные, чем я, это может привести к проблемам, если число отрицательное (что именно зависит от вашего компилятора). В любом случае, было бы бессмысленно обрабатывать отрицательные числа таким образом, если только вы не указали, какой тип арифметического представления будет использовать возвращаемое значение (1s дополнить? 2s дополнить? Префиксный бит знака?), Поэтому такой подход оказывается практически насколько я могу судить, бесполезно для отрицательных чисел.
Извините за отвлечение внимания от более достойных ответов.
Оригинал
Ну, это приходит на ум:
int i = 42; // or whatever
std::vector<bool> vec;
while(i) {
vec.push_back(i & 1);
i >>= 1;
}
std::reverse(vec);
Конечно, это не массив, но вместо этого просто скопировать содержимое вектора в массив, если вы этого хотите, например:
bool boolArray[] = new bool[vec.size()];
std::copy(vec.rbegin(), vec.rend(), boolArray);