2011-11-17 95 views

回答

4

你真的應該使用一個unsigned short來避免高位上的語言怪癖。

unsigned short myShort = (unsigned short)bits.to_ulong(); 
2

我會用to_ulong方法對於這一點,並把結果(因爲你知道,只有最低的16位將被使用):

short myShort = static_cast<short>(bits.to_ulong()); 
0
bitset<16> b; 
... 
short myShort = (short)b.to_ulong(); 
2

正如其他人所說,to_ulong將工作。我有些疑問,直到我看了標準,C++ 03§23.3.5/ 3,

, , ,
, ,

是否保證位順序。當在類位集的對象和某些整型,位位置pos對應於位值1 << pos。對應於兩位或更多位的整數值是它們位值的和。

所以,你可以沒有關於溢出或字節序的憂慮投to_ulongunsigned short(或更好,但uint16_t)。

+0

+1實際閱讀的東西。 –