2011-11-17 19 views
5

यदि मेरे पास bitset<16> bits(*iter) है और मेरा छोटा मैं इस बिस्ट को अपने छोटे से कैसे सौंप सकता हूं?मैं बिट्ससेट को सी ++ में छोटा कैसे बदल सकता हूं?

short myShort = ??bits?? 

एक बिटसेट < 16> को छोटा करने के लिए संभव है?

उत्तर

4

हाई बिट पर भाषा quirks से बचने के लिए, आपको वास्तव में एक हस्ताक्षरित शॉर्ट का उपयोग करना चाहिए।

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 काम करेगा। मैं कुछ संदेह है कि क्या बिट आदेश जब तक मैं स्टैंडर्ड को देखा गारंटी दी गई थी, सी ++ 03 §23.3.5/3 महसूस कर रहा था,

जब वर्ग bitset का एक उद्देश्य और कुछ अभिन्न प्रकार का एक मूल्य के बीच परिवर्तित , बिट स्थिति pos बिट मान 1 << pos से मेल खाती है। दो या दो से अधिक बिट्स के अनुरूप अभिन्न मूल्य उनके बिट मानों का योग है।

तो, आप अतिप्रवाह या endianness के बारे में कोई चिंता नहीं के साथ unsigned short करने के लिए to_ulong (या बेहतर अभी तक, uint16_t) डाली कर सकते हैं। वास्तव में चीजों को पढ़ने के लिए

+0

+1। –

संबंधित मुद्दे