将位集转换为有符号
Converting a bitset to signed
我有一个 std::bitset<32>,我想分离出正确的 16 位并将这些位作为有符号数输出。我还想将整个 32 位的东西作为带符号的数字输出。但是,Bitset 不支持 signed 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;
我有一个 std::bitset<32>,我想分离出正确的 16 位并将这些位作为有符号数输出。我还想将整个 32 位的东西作为带符号的数字输出。但是,Bitset 不支持 signed 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;