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

例如
1010000000100001 1111111111111111:

我希望一个输出是:

-1608384513用于整个序列

-1为右16位。

有任何巧妙的转换方式吗?

最佳答案

要获得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.

关于c++ - 将位集转换为带符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43314222/

10-10 06:12