के के हो? · bei.pm
यस खण्डमा फाइल फर्म्याट र रिभर्स इन्जिनियरिङ्गका बारेमा लेखहरू छन्।
तर यत्रा कुरा यस्तो छ:
त्यहाँ बाहिर धेरै प्रोग्रामिङ्ग भाषाहरू छन् र धेरै मानिसहरूले केहि चीजहरूलाई पूर्ण रूपमा भिन्न नाममा चिन्छन् - या त तिनीहरूलाई आधारभूत कुराहरूको अस्तित्वको बारेमा कुनै ज्ञान छैन, किनकि तिनीहरूको प्रोग्रामिङ्ग भाषा तिनीहरूलाई त्यसबाट दूर लिन्छ।
tl;dr:
मेरो नोटेशन C99 <stdint.h>
मा आधारित छ। जसले यो नोटेशनलाई बुझ्न सक्छ, उसले मेरो नोटेशनसँग पनि सजिलै काम गर्न सक्छ।
पूर्णांक
Integer सादा शब्दमा भनेको पूर्णांक हो, अर्थात् दशमलव भाग नभएका संख्याहरू।
Integer प्रायः निश्चित संख्यात्मक दायरा, अर्थात् एक प्रकारको रिजोल्युसनमा डेटा ढाँचामा परिभाषित गरिन्छ। म यसलाई बिटमा दिन्छु - यो कारणले कि "बाइट" र यसमा आधारित प्रकारहरू (वर्ड, क्यूवर्ड, ...) प्रायः प्लेटफर्ममा निर्भर हुन्छन्।
त्यसैगरी Integer प्रकारमा प्राकृतिक संख्याहरू (ℕ, अर्थात्, बिना संकेत - Unsigned) र पूर्ण संख्याहरू (ℤ, अर्थात्, संकेत सहित - Signed) बीचमा भिन्नता गरिन्छ।
यो जानकारी संकेतको माध्यमबाट विचारकमा (u
वा s
) देखिन्छ।
यसमा, संकेत सहितका पूर्ण संख्याहरूलाई एकको पूरक वा दुईको पूरकको रूपमा प्रस्तुत गर्न सकिन्छ।
अर्को कुनै कुरा उल्लेख नगरेसम्म, दुईको पूरक प्रयोग गरिन्छ, किनकि यो आधुनिक कम्प्युटर विज्ञानमा प्राथमिक प्रस्तुति हो।
मले मेरो कागजातहरूमा संकेत रहित संख्याहरूलाई uint
को रूपमा सन्दर्भ गर्छु, त्यसपछि Bitsमा सटीकता उल्लेख गर्दै।
संकेत सहितका संख्याहरूलाई म मेरो कागजातहरूमा sint
को रूपमा उल्लेख गर्छु, यसैगरी सटीकता Bitsमा उल्लेख गर्दै।
म "char" डाटा प्रकारको प्रयोग गर्नछु नगर्नेछु, किनभने अक्षरहरू प्रायः केवल विशेष व्याख्या भएको Integer मानहरूको श्रृंखला प्रस्तुत गर्छन्।
यसकारण, तिनीहरूलाई uint(8)[]को रूपमा प्रस्तुत गरिन्छ।
उदाहरणहरू:
संकेत | C99 stdint.h -समान |
विवरण | संख्यात्मक क्षेत्र |
---|---|---|---|
uint(16) | uint16_t | अनसाइन गरिएको पूर्णांक, १६ बिट लम्बाइ | 0 - 65.535 |
sint(8) | int8_t | साइन गरिएको पूर्णांक, ८ बिट लम्बाइ, दुईको पूरक | -126 - 127 |
uint(24) | uint32_t:24 | अनसाइन गरिएको पूर्णांक, २४ बिट लम्बाइ | 0 - 16.777.216 |
फेस्टकोम्मा-मानहरू
फिक्स्ड-पॉइंट मान भनेको संख्यात्मक मानहरू हुन् जुन यथार्थ संख्याहरू (Q)को स्पेक्ट्रमबाट आउँछन्, जसले कम र न्यूनतम अंक रहेका छन्।
फिक्स्ड-पॉइंट मानहरूको लागि - त्यसैले नाम पनि - कमाको स्थिति डाटाटाइपले निश्चित रूपमा परिभाषित गरिएको छ।
यसबाट यस डाटाटाइपको संख्याहरूका लागि एक निश्चित संख्यात्मक दायरा पनि उत्पन्न हुन्छ; गणितीय रूपमा व्यक्त गरिएको भनेको संख्यात्मक क्षेत्र सीमित हो।
वास्तवमा, यो डाटाटाइप प्रायः ती प्लेटफार्महरूमा प्रयोग गरिन्छ जहाँ पर्याप्त छिटो फ्लोटिंग-पॉइन्ट हार्डवेयर इकाई उपलब्ध छैन, किनकि फिक्स्ड-पॉइंट मानहरूको गणना पूर्णांक इकाइद्वारा गर्न सकिन्छ।
साथै, यो डाटाटाइप उदाहरणका लागि डेटाबेस प्रबन्धन प्रणालीहरूले प्रयोग गर्छन्, जब निश्चित आवश्यकताहरू पूरा गर्नुपर्दछ।
यहाँ स्थायी वित्तीय डेटा भण्डारण गर्ने प्रणालीहरूको बारेमा सोच्न सकिन्छ; अधिकांश मुद्रा 2 अंकसम्म मात्र सीमित हुन्छ।
(तर यसका लागि फिक्स्ड-पॉइंट मानहरू लिनु बुद्धिमानी हुँदैन; यसको सट्टा सिधै सर्वाधित मुद्रा इकाईलाई पूर्णांकको रूपमा भण्डारण गर्नु र बाकीको प्रतिनिधित्व स्तरमा छोड्नु समझदारी हो)
पूर्णांकको विवरणसँग समान, म फिक्स्ड-पॉइंट मानहरूको लागि संख्या कम र न्यूनतम अंक उल्लेख गर्छु:
ufixed(9,7)
भनेको एक डाटाटाइप हो, जसले कमाको अगाडि 9 बिट र कमाको पछाडि 7 बिटको लागि स्थान आरक्षित गर्दछ; कुल मिलाएर 16 बिट चोखो हुन्छ र यसले उदाहरणका लागि दुई स्वतन्त्र पूर्णांकको भेक्टरको रूपमा (0,0) देखि (511,127) सम्मको दायरा कभर गर्न सक्छ।
तर यो व्याख्या यसको दशमलव प्रतिनिधित्वमा 28 संख्याहरूको उपयोग नगरी बर्बाद गर्नेछ, किनकि व्यवहारमा अधिकतम (511,99) मा सीमित हुने सम्भावना हुन्छ।
फिक्स्ड-पॉइंट मानलाई 2 अलग पूर्णांकको भेक्टरको रूपमा प्रत्यक्ष व्याख्या गर्नको सट्टा - जसले प्रायः दशमलव संख्यामा रूपान्तरण गर्दा अनुत्पादित डाटा क्षेत्र र म्यानुअल ओभरफ्लोको अर्थ हुन्छ - कमाको क्षेत्रलाई यसको सम्पूर्ण समाधानको भाज्यको रूपमा पनि व्याख्या गर्न सकिन्छ।
ufixed(9,7)
को उदाहरणमा यसैले 27 को अनुपातको रूपमा एक भाज्य उत्पन्न हुन्छ - संख्यात्मक दायरा 0.00 देखि 511 + 126⁄127 सम्म जान्छ।
एक दशमलव प्रतिनिधित्वमा रूपान्तरण गर्नको लागि, त्यसैले न्यूनतम अंकलाई 128 द्वारा विभाजित गर्नुपर्छ।
यस भेरियन्टले गणितीय अपरेशनहरू गर्न सजिलो बनाउँछ, किनकि ओभरफ्लो स्वचालित रूपमा उत्पन्न हुन्छ, जसले गर्दा यो भेरियन्ट प्रायः प्राथमिकतामा हुन्छ।
तर, यस भेरियन्टको एउटा कमी छ कि दशमलव प्रतिनिधित्वमा न्यूनतम अंकहरू थप सुनिश्चित गरिएको समाधान नभएसम्म, एकल दशमलव अंकले अब 0.01
को सट्टा 0.007874
को मूल्य लिन्छ, जसले गर्दा त्यसमा गोलाईको त्रुटिहरू उत्पन्न हुन्छ।
कुन प्रकारको व्याख्या प्रयोग गरिन्छ, त्यसको दस्तावेज प्रयोगको स्थानमा गरिन्छ।
तैरने अंक वा फ्लोटिङ्ग मान
फ्लोटिङ्ग-कोमा मानहरू गणितीय रूपमा जटिल अभिव्यक्तिहरू हुन्, जहाँ एक निश्चित सोल्युसनको साथको पूर्णांकलाई एक गणितीय सूत्रमा यसरी व्यक्त गरिन्छ कि प्रभावकारी रूपमा दशमलव भागलाई स्थानान्तरण गरेर बनाइन्छ - र यसैले वैज्ञानिक नोटेशन को सन्दर्भमा सिधै उन्मुख हुन्छ।
यसलाई कार्यान्वयन गर्ने सबैभन्दा सामान्य तरिका IEEE 754 मा मानकीकरण गरिएको छ र त्यसपछि अन्तर्राष्ट्रिय रूपमा मान्यता प्राप्त गरिएको छ।
यसमा, फ्लोटिङ्ग-कोमा मान सामान्यतया निम्नलिखित घटकहरूमा आधारित हुन्छ:
चिन्ह (0 वा 1 ) |
उत्पत्ति | म्यान्टिस |
जबकि चिन्हलाई बाइनरी हजुर/नहजुरको रूपमा सजिलैसँग पत्ता लगाउन सकिन्छ, वास्तविक नम्बर समीकरणबाट बनेको छ
म्यान्टिस * 2उत्पत्ति
त्यसका अतिरिक्त, स्थायी मानहरूको श्रृंखला पनि छ, जसले विशेष अवस्थाहरू राशियात्मक संख्याहरूलाई समेट्छ - जसमा ±∞
र NaN
("कोई मान्य संख्या छैन") समावेश छन्।
फ्लोटिङ्ग-कोमा मानहरू विशेष रूपले तब उपयोगी हुन्छन् जब सटीकता त्यति महत्त्वपूर्ण छैन, किनभने यस प्रकारका मानहरूमा अनिवार्य रूपमा गोलाइको त्रुटिहरू र यसर्थ सटीकता गुमाइन्छ। विशेषतः, फ्लोटिङ्ग-कोमा मानहरू उदाहरणका लागि कोअर्डिनेटको परिभाषाको लागि, जस्तै 3D मोडेलहरूको भेरटेक्स भेक्टर वा दृश्यात्मक प्रतिनिधित्वको लागि बेजीर/स्प्लाइन वक्रहरूमा प्रयोग गरिन्छ।
डाटा फर्म्याटहरूमा फ्लोटिङ्ग-कोमा मानहरूलाई float(म्यान्टिस, उत्पत्ति)
रूपमा निर्दिष्ट गरिएको छ।
यदि IEEE 754 बाट भिन्न कुनै फर्म्याट प्रयोग गरिएको छ भने, यसलाई अनुसार सूचित गरिनेछ।