In c++. I initialize a bitset to -3 like:
std::bitset<32> mybit(-3);
Is there a grace way that convert mybit
to -3
. Beacause bitset object only have methods like to_ulong
and to_string
.
In c++. I initialize a bitset to -3 like:
std::bitset<32> mybit(-3);
Is there a grace way that convert mybit
to -3
. Beacause bitset object only have methods like to_ulong
and to_string
.
Use to_ulong
to convert it to unsigned long
, then an ordinary cast to convert it to int
.
int mybit_int;
mybit_int = (int)(mybit.to_ulong());
#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;
}