Конвертировать набор битов в int в C++

В с ++. Я инициализирую набор битов в -3 как:

std::bitset<32> mybit(-3);

Есть ли способ благодати, который преобразует mybit в -3, Поскольку у объекта набора битов есть только методы как to_ulong а также to_string,

2 ответа

Решение

Использование to_ulong преобразовать его в unsigned longзатем обычное приведение, чтобы преобразовать его в int,

int mybit_int;

mybit_int = (int)(mybit.to_ulong());

DEMO

Один полный пример работал как для 32-битных, так и для не-32-битных наборов битов.

      #include <bitset>
#include <iostream>

template<std::size_t SIZE>
int bitSetToInt(std::bitset<SIZE> bitSet) {
    if (!bitSet[SIZE - 1]) return bitSet.to_ulong();
    bitSet.flip();
    return -(bitSet.to_ulong() + 1);
}

int main() {
    std::bitset<31> bitSet1(7);
    std::bitset<31> bitSet2(-7);
    std::bitset<32> bitSet3(7);
    std::bitset<32> bitSet4(-7);
    std::cout << bitSet1 << " = " << bitSetToInt(bitSet1) << std::endl;
    std::cout << bitSet2 << " = " << bitSetToInt(bitSet2) << std::endl;
    std::cout << bitSet3 << " = " << bitSetToInt(bitSet3) << std::endl;
    std::cout << bitSet4 << " = " << bitSetToInt(bitSet4) << std::endl;
}

Выход

      0000000000000000000000000000111 = 7
1111111111111111111111111111001 = -7
00000000000000000000000000000111 = 7
11111111111111111111111111111001 = -7

Динамическая версия

      #include <iostream>
#include <boost/dynamic_bitset.hpp>

int dynamicBitSetToInt(boost::dynamic_bitset<> bitSet) {
    if (!bitSet[bitSet.size() - 1]) return (int) bitSet.to_ulong();
    bitSet.flip();
    return (int) -(bitSet.to_ulong() + 1);
}

int main() {
    boost::dynamic_bitset bitSet1(31, 7);
    boost::dynamic_bitset bitSet2(31, -7);
    boost::dynamic_bitset bitSet3(32, 7);
    boost::dynamic_bitset bitSet4(32, -7);
    std::cout << bitSet1 << " = " << dynamicBitSetToInt(bitSet1) << std::endl;
    std::cout << bitSet2 << " = " << dynamicBitSetToInt(bitSet2) << std::endl;
    std::cout << bitSet3 << " = " << dynamicBitSetToInt(bitSet3) << std::endl;
    std::cout << bitSet4 << " = " << dynamicBitSetToInt(bitSet4) << std::endl;
}
Другие вопросы по тегам