Как преобразовать заданный битсет длины N (где 0 < N < 64
) в подписанный int. Например, учитывая:Подписанный int from bitset <n>
std::bitset<13> b("1111111101100");
Я хотел бы получить обратно значение -20, а не 8172.
Мой подход:
int t = (static_cast<int>(b.to_ullong()));
if(t > pow(2, 13)/2)
t -= pow(2, 13);
Есть более общий способ приблизиться к этому?
Редактировать: Также битсет на самом деле std::bitset<64>
, а N может быть известным значением времени выполнения, переданным другими способами.
И работает ли он так, как планировалось? –
Это так, но, как вы можете видеть, не совсем ясно, что он делает. Таким образом, мой вопрос на самом деле, есть ли «более чистый» способ сделать это? – carobnodrvo
Подписанный int содержит в большинстве реализаций меньше бит информации, чем битсет длиной 64, поэтому ваше преобразование должно быть потеряно. –