यदि मेरे पास bitset<16> bits(*iter)
है और मेरा छोटा मैं इस बिस्ट को अपने छोटे से कैसे सौंप सकता हूं?मैं बिट्ससेट को सी ++ में छोटा कैसे बदल सकता हूं?
short myShort = ??bits??
एक बिटसेट < 16> को छोटा करने के लिए संभव है?
यदि मेरे पास bitset<16> bits(*iter)
है और मेरा छोटा मैं इस बिस्ट को अपने छोटे से कैसे सौंप सकता हूं?मैं बिट्ससेट को सी ++ में छोटा कैसे बदल सकता हूं?
short myShort = ??bits??
एक बिटसेट < 16> को छोटा करने के लिए संभव है?
हाई बिट पर भाषा quirks से बचने के लिए, आपको वास्तव में एक हस्ताक्षरित शॉर्ट का उपयोग करना चाहिए।
unsigned short myShort = (unsigned short)bits.to_ulong();
मैं to_ulong
विधि इस के लिए उपयोग करना चाहते हैं, और परिणाम डाली (क्योंकि आप जानते हैं कि केवल न्यूनतम 16 बिट का उपयोग किया जाएगा):
short myShort = static_cast<short>(bits.to_ulong());
उपयोग to_ulong
http://new.cplusplus.com/reference/stl/bitset/to_ulong/
bitset<16> b;
...
short myShort = (short)b.to_ulong();
जैसा कि अन्य ने कहा है, to_ulong
काम करेगा। मैं कुछ संदेह है कि क्या बिट आदेश जब तक मैं स्टैंडर्ड को देखा गारंटी दी गई थी, सी ++ 03 §23.3.5/3 महसूस कर रहा था,
जब वर्ग bitset का एक उद्देश्य और कुछ अभिन्न प्रकार का एक मूल्य के बीच परिवर्तित , बिट स्थिति
pos
बिट मान1 << pos
से मेल खाती है। दो या दो से अधिक बिट्स के अनुरूप अभिन्न मूल्य उनके बिट मानों का योग है।
तो, आप अतिप्रवाह या endianness के बारे में कोई चिंता नहीं के साथ unsigned short
करने के लिए to_ulong
(या बेहतर अभी तक, uint16_t
) डाली कर सकते हैं। वास्तव में चीजों को पढ़ने के लिए
+1। –