2

std::bitset<32> があり、右の 16 ビットを分離し、それらのビットを符号付きの数値であるかのように出力したいと考えています。また、32ビット全体を符号付き数値として出力したいと考えています。ただし、Bitset は signed int to_string() をサポートしていません。

たとえば、1010000000100001 1111111111111111:

1つの出力を次のようにしたい:

-1608384513 シーケンス全体

右側の 16 ビットの場合は -1。

それらを変換する巧妙な方法はありますか?

4

1 に答える 1

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;

デモ。

于 2017-04-10T02:47:35.583 に答える