सी

2011-01-28 3 views
17

में printf() के लिए प्रारूप विनिर्देश% एक है, मैं एक सी भाषा पुस्तक पढ़ रहा हूं, यह कहा गया है कि %f, %e, %g, %afloat और double डेटा प्रकारों के लिए प्रयुक्त प्रिंटफ वर्ण थे। वर्तमान में मैं %f, %e, %g पूरी तरह से समझ सकता हूं।सी

float और double टाइप करने के लिए मुझे %a का उपयोग करने की आवश्यकता कब होगी?

क्या आप मुझे एक उदाहरण दिखा सकते हैं।

उत्तर

30

%a स्वरूपण विनिर्देश C99 में नया है। यह हेक्साडेसिमल रूप में फ़्लोटिंग-पॉइंट नंबर प्रिंट करता है। यह ऐसा कुछ नहीं है जिसका उपयोग आप उपयोगकर्ताओं को संख्याओं को प्रस्तुत करने के लिए करेंगे, लेकिन यह अंडर-द-हूड/तकनीकी उपयोग के मामलों के लिए बहुत आसान है।

उदाहरण के लिए, इस कोड:

printf("pi=%a\n", 3.14); 

प्रिंट:

pi=0x1.91eb86p+1 

उत्कृष्ट लेख टिप्पणी में जुड़े हुए बताते हैं कि यह "पढ़ा जाना चाहिए 1.91EB86 * 2 "(है, ppower-of-two के लिए है फ्लोटिंग-पॉइंट नंबर पर बढ़ाया गया है)। इस मामले में, "1.91EB86 " है "1.5700000524520874 "। इसे "2 " से गुणा करें, और आपको "3.140000104904175 " मिलें।

ध्यान दें कि इसमें सटीकता के सभी बिट्स को संरक्षित करने और उन्हें एक मजबूत तरीके से प्रस्तुत करने की उपयोगी संपत्ति भी है।

+6

आप यहां हेक्साडेसिमल फ्लोटिंग-पॉइंट स्थिरांक के बारे में अधिक पढ़ सकते हैं: http://www.exploringbinary.com/hexadecimal-floating-point-constants/। –

6

जहां तक ​​आप हेक्स प्रस्तुति का उपयोग करना चाहते हैं, इसका एक उदाहरण है, तो आप प्रसंस्करण के लिए किसी अन्य मशीन पर भेजे जाने वाले फ़्लोटिंग पॉइंट मान को सटीक रूप से प्रस्तुत करने के लिए% ए का उपयोग करना चाह सकते हैं।

हम वर्तमान में एक सिम्युलेटेड प्लांट मॉडल से डेटा भेजकर एक एम्बेडेड नियंत्रक का परीक्षण कर रहे हैं जो एक यूएआरटी के माध्यम से एम्बेडेड प्रोसेसर को सेंसर और एक्ट्यूएटर को अनुकरण कर रहा है जहां एम्बेडेड प्रोसेसर इसका नियंत्रण प्रसंस्करण करता है और प्रतिक्रिया देता है (फिर से , फ्लोट को% ए के रूप में दर्शाया गया है) लूप को बंद करने के लिए संयंत्र मॉडल पर वापस।

+0

एम्बेडेड सिस्टम पर बस एक सिर, कम से कम एटमेल SAME70% ए और% ए काम नहीं करता – jjxtra