2

我有一个 std::bitset<32> 并且我想隔离正确的 16 位并输出这些位,就好像它们是有符号数一样。我还想将整个 32 位的东西输出为有符号的数字。但是,Bitset 不支持带符号的 int to_string()。

例如 1010000000100001 1111111111111111:

我想要一个输出是:

-1608384513 为整个序列

-1 表示右 16 位。

任何转换它们的巧妙方法?

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 回答