int to bool [] в c ++ - PullRequest
       31

int to bool [] в c ++

1 голос
/ 07 декабря 2011

То, что я хочу сделать, это дать аргумент const int &i, вернуть биты двоичного представления i в виде массива bool (и обратно тоже будет здорово) ... Кто-нибудь знаете как?

Ответы [ 2 ]

7 голосов
/ 07 декабря 2011

Если вам действительно не нужно, чтобы это был конкретно массив bool, я бы использовал std::bitset:

std::bitset bits<32>(i);

Обычно вы можете рассматривать это в значительной степени как массив bool, тестирование, установку и переключение отдельных битов и т. Д. Конечно, если вы хотите переносимости к чему-то, что имеет другой размер int, вы можете изменить его на что-то вроде:

#define size (sizeof(int) * CHAR_BIT)

std::bitset bits<size>(i);
2 голосов
/ 07 декабря 2011

Редактировать: Как отмечают люди более опытные, чем я, это может привести к проблемам, если число отрицательное (что именно зависит от вашего компилятора). В любом случае, было бы бессмысленно обрабатывать отрицательные числа таким образом, если только вы не указали, какой тип арифметического представления будет использовать возвращаемое значение (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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...