4

私は質問convert bitset to int in c++ を読んでいて、ちょっと、それはうまくいかない、私はすでに試しました。しかし、それから私は試し始め、すぐに次のことを発見しました:

#include <bitset>
#include <iostream>
int main()
{
   std::bitset<31> b31(-1);
   std::bitset<32> b32(-1);
   std::cout<<static_cast<int>(b31.to_ulong())<<std::endl;
   std::cout<<static_cast<int>(b32.to_ulong())<<std::endl;
   return 0;
}

出力を与える

2147483647
-1

では、32 より小さいビットセットを符号付き整数にキャストするにはどうすればよいでしょうか?

明確化: 保持されたビットセットを構築するときに使用される 10 ベースの値を使用して、signed int にキャストバックしたいと考えています。「符号付き整数をビットセットに格納」

これをgcc 4.6.2、win 7のmingw32で試しましたが、cスタイルのキャストでも同じ結果が得られました(int)

4

3 に答える 3

2

これらの線に沿ったものはどうですか:

#include <bitset>
#include <iostream>

template<std::size_t B>
long bitset_to_long(const std::bitset<B>& b) {
  struct {long x:B;} s;
  return s.x = b.to_ulong();
}

int main()
{
   std::bitset<31> b31(-1);
   std::bitset<32> b32(-1);
   std::cout << bitset_to_long(b31) << std::endl;
   std::cout << bitset_to_long(b32) << std::endl;
   return 0;
}

(一定のビット幅から拡張された Sign に触発されました。)

于 2014-12-09T11:53:48.983 に答える