एक प्रकार रूपांतरण
वैचारिक मूल्य (bitpattern परिवर्तित करने की हो सकती है), या
रख सकते bitpattern (वैचारिक मूल्य होना पड़ सकता रखना बदला हुआ)।
एकमात्र सी ++ कलाकार जो गारंटी देता है वह हमेशा बिटपटर को const_cast
रखता है।
ए reinterpret_cast
, जैसा कि इसके नाम से पता चलता है, बिटपटर को रखने और बस इसे फिर से परिभाषित करने का इरादा है। लेकिन मानक reinterpret_cast
को कार्यान्वित करने के तरीके में कार्यान्वयन को बहुत अधिक छूट देता है। कुछ मामलों में reinterpret_cast
बिटपटर बदल सकता है।
ए dynamic_cast
आम तौर पर दोनों बिटपटर और मान को बदलता है, क्योंकि यह आमतौर पर किसी ऑब्जेक्ट में जाता है और अनुरोधित प्रकार के उप-ऑब्जेक्ट के लिए सूचक/संदर्भ देता है।
एक static_cast
दोनों पूर्णांकों और संकेत, लेकिन के लिए bitpattern बदल सकता है, लगभग सभी मौजूदा कंप्यूटरों पर हस्ताक्षर किए पूर्णांकों का प्रतिनिधित्व (दो का पूरक कहा जाता है) जहां static_cast
bitpattern परिवर्तन नहीं होगा का उपयोग करें। पॉइंटर्स के बारे में, यह कहने के लिए पर्याप्त है कि, उदाहरण के लिए, जब बेस क्लास गैर-पॉलिमॉर्फिक होता है और व्युत्पन्न वर्ग पॉलिमॉर्फिक होता है, तो static_cast
का उपयोग करके पॉइंटर से लेकर पॉइंटर तक आधार तक जाने के लिए, या इसके विपरीत, बिटपटरर्न (void*
पॉइंटर्स की तुलना करते समय आप देख सकते हैं)। अब, पूर्णांकों ...
n मूल्य बिट्स के साथ
, एक अहस्ताक्षरित पूर्णांक प्रकार 2^n मूल्यों, रेंज 0 में 2^n -1 (सम्मिलित) के माध्यम से किया है।
सी ++ मानक की गारंटी देता है प्रकार के किसी भी परिणाम जोड़ने या 2^n का एक उपयुक्त कई घटाकर की उस श्रेणी में लपेटा है।
वास्तव में सी मानक इसका वर्णन करता है; सी ++ मानक बस कहता है कि संचालन मॉड्यूल 2^एन है, जिसका अर्थ है।
दो के पूरक रूप साथ
एक हस्ताक्षरित मूल्य - एक्स + 2^n - एक्स अहस्ताक्षरित मूल्य के रूप में ही bitpattern है। यही है, सी ++ मानक गारंटी के समान वही बिटपर्टर जो आपको परिवर्तित करके प्राप्त होता है - x उसी आकार के हस्ताक्षरित प्रकार के लिए। यह दो पूरक पूरक रूपों की सरल मूल बातें है, यह निश्चित रूप से गारंटी है कि आप खोज रहे हैं। :-)
और लगभग सभी मौजूदा कंप्यूटर दो पूरक फॉर्म का उपयोग करते हैं।
इसलिए, व्यावहारिक रूप से आपको अपने उदाहरणों के लिए एक अपरिवर्तित बिटपटर प्रदान किया जाता है।
वीएस -2008 में अपने स्वयं के परीक्षण से static_cast (lUnsigned) बिट्स को नहीं बदलता है। –
यह एक कार्यान्वयन विस्तार है जो अंतर्निहित पूर्णांक प्रतिनिधित्व है। 2 तारीफ की कोई धारणा बनाना अंततः आपको गधे में काट देगा। –
गुड प्वाइंट मार्टिन। मुझे एक जटिलता है हालांकि मुझे पता है कि मेरा मान एक हस्ताक्षरित 2 एस पूरक संख्या है क्योंकि यह हार्डवेयर से आ रहा है, और लाइब्रेरी के कारण, मान एक हस्ताक्षरित int में संग्रहीत हो जाता है। मैं इसे वापस एक सायन प्रकार में ले जाना चाहता हूं! :) –