2011-11-17 6 views

risposta

4

È consigliabile utilizzare un cortocircuito senza segno, per evitare stranezze di linguaggio sul bit più elevato.

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

userei il metodo to_ulong per questo, e gettato il risultato (in quanto si sa che sarà utilizzato solo il più basso a 16 bit):

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

Come altri hanno già detto, to_ulong funzionerà. Avevo qualche dubbio sul fatto che il bit order fosse garantito fino a quando non ho guardato lo Standard, C++ 03 §23.3.5/3,

Quando si converte tra un oggetto di bit di classe e un valore di tipo integrale , la posizione bit pos corrisponde al valore di bit 1 << pos. Il valore integrale corrispondente a due o più bit è la somma dei loro valori di bit.

Quindi, si può lanciare to_ulong-unsigned short (o meglio ancora, uint16_t) senza preoccuparsi di overflow o endianness.

+0

+1 per leggere effettivamente le cose. –

Problemi correlati