2017-04-10 111 views
2

我有一個std :: bitset < 32>我想隔離正確的16位並輸出這些位,就好像它們是有符號數字一樣。我也希望把整個32位的東西作爲一個有符號的數字輸出。但是,Bitset不支持signed int to_string()。將bitset轉換爲signed

例如 1010000000100001 1111111111111111:

我想一個輸出爲:

-1608384513爲全序列

-1爲右16個比特。

任何光滑的方式來轉換它們?

+0

你可能嘗試這種(但我想驗證首先從多個experenced C++的bitset用戶):'無符號長長VAL = bitset.to_ullong(); int16_t final =(int16_t)(val&000000000000FFFF);' – synchronizer

回答

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; 

Demo.

+0

你甚至需要位掩碼嗎?無論如何,演員陣容都會剔除高位,所以它們的價值應該不會有多大關係。 –