हेक्साडेसिमल 1065353216 0x3F800000 है। यदि आप इसे 32-बिट फ़्लोटिंग पॉइंट नंबर के रूप में समझते हैं तो आपको 1.0 मिलते हैं। आप बाइनरी में इसे बाहर लिखते हैं तो आप इस मिल:
3 F 8 0 0 0 0 0
0011 1111 1000 0000 0000 0000 0000 0000
या अलग ढंग से वर्गीकृत किया:
0 01111111 00000000000000000000000
s eeeeeeee vvvvvvvvvvvvvvvvvvvvvvv
पहली बिट (s
) चिह्न सा है, अगले 8 बिट (e
) प्रतिपादक हैं , और अंतिम 23 बिट्स (v
) महत्वपूर्ण हैं। "एकल परिशुद्धता बाइनरी फ़्लोटिंग-पॉइंट एक्सपोनेंट ऑफसेट बाइनरी प्रस्तुति का उपयोग करके एन्कोड किया गया है, शून्य ऑफसेट 127 होने के साथ, IEEE 754 standard में एक्सपोनेंट पूर्वाग्रह के रूप में भी जाना जाता है।" इस व्याख्या में आप देखते हैं कि साइन 0 (सकारात्मक) है, एक्सपोनेंट 0 है (01111111 बी = 127, "शून्य ऑफसेट"), और महत्व 0 है। यह आपको +0 देता है जो 1.0 है।
किसी भी तरह, क्या हो रहा है कि आप एक फ्लोट (b
) का संदर्भ ले रहे हैं और इसे एक संदर्भ संदर्भ (int&)
के रूप में दोबारा परिभाषित कर रहे हैं। तो जब आप j
के मान को पढ़ते हैं तो आपको b
से बिट मिलते हैं। फ्लोट के रूप में व्याख्या की गई उन बिट्स का मतलब 1.0 है, लेकिन उन बिट्स के रूप में व्याख्या की गई है जो 10 बिट353216 है।
इसके लायक होने के लिए, मैंने कभी भी &
(int&)
जैसे कास्ट का उपयोग नहीं किया है। मैं इसे देखने या किसी भी सामान्य सी ++ कोड में इसका उपयोग करने की उम्मीद नहीं करता।
स्रोत
2009-10-13 16:25:01
हाँ, यह एक बहुत अच्छा जवाब है। लेकिन मुझे एक और सवाल मिलता है। एक त्रुटि क्यों, "त्रुटि: 'int &' टाइप करने के लिए 'float' प्रकार से अमान्य static_cast, तब हुआ जब मैंने static_cast का उपयोग int को फ़्लोट करने के लिए किया था और" फ्लोट बी = 1.0 एफ; int और j = static_cast b; "। मुझे अपनी पसंदीदा सी ++ पुस्तक, "सी ++ प्रोग्रामिंग भाषा" में static_cast की सीमाएं नहीं मिलीं। –
toby
यह सुरक्षा है जिसे आप सी ++ स्टाइल कास्ट का उपयोग करने से प्राप्त करते हैं। यदि संकलक एक static_cast संभावनाओं को स्वीकार करता है तो आप कुछ भी गलत नहीं कर रहे हैं। एकमात्र असुरक्षित चीजें जो एक स्थैतिक कलाकार आपको करने देती हैं, वह बेस */बेस और व्युत्पन्न */व्युत्पन्न और शून्य * से * * तक अनचेक रूपांतरण है जहां तक मुझे याद है। यह मूल रूप से निहित रूपांतरणों को उलटा कर सकता है, अधिक नहीं - कॉन्स्ट रूपांतरणों की गणना नहीं कर रहा है। – sellibitze
हाय, sellibitze, आपकी मदद के लिए धन्यवाद! मैं समझ गया! – toby