2017-04-10 4 views
2

私はstd :: bitset < 32>を持っています。正しい16ビットを分離し、それらのビットを符号付きの数のように出力したいと思います。また、32ビットのもの全体を符号付きの数値として出力することも考えています。しかし、Bitsetはsigned int to_string()をサポートしていません。例 1010000000100001 1111111111111111ためビットセットを符号付きに変換する

:シーケンス全体のため

-1608384513

-1右16ビット用:

私は1つの出力になりたいです。

どのような滑らかな変換方法ですか?

+0

あなたはおそらくこれを試みることができる(しかし、私はもっとexperenced C++ビットセットのユーザーからの最初の検証を希望): 'unsigned long型長いのval = bitset.to_ullong(); int16_t final =(int16_t)(val&000000000000FFFF); ' – synchronizer

答えて

1

16ビットの数値を取得するには、to_ulong()を使用し、上位16ビットを削除し、int16_tとして再解釈します。

同様に、符号付き32ビット番号の場合は、to_ulong()と呼び出し、符号付きint32_tとして再解釈することができます。

std::bitset<32> b("10100000001000011111111111111111"); 
int16_t x16 = (int16_t)(b.to_ulong() & 0xFFFF); 
int32_t x32 = (int32_t)b.to_ulong(); 
cout << x16 << endl; 
cout << x32 << endl; 

Demo.

+0

ビットマスクが必要ですか?とにかくキャストは高いビットを切り捨てるので、実際にその値が何であるかは重要ではありません。 –

関連する問題