我有一个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/