2012-01-29 9 views
6

पूर्णांक मूल्यों के लिए, यह थोड़ा endian और बड़ा endian प्रतिनिधित्व में अंतर बिल्कुल स्पष्ट है।बड़े और छोटे एंडियन फ्लोट्स के बीच क्या अंतर है?

लेकिन यह मेरे लिए स्पष्ट नहीं है कि कैसे एक छोटे एंडियन फ्लोट एक बड़े एंडियन फ्लोट से अलग है।

और आखिर में, मैं जानना चाहता हूं कि अधिक सामान्य रूप से उपयोग किया जाता है।

+11

endianness रास्ता मूल्यों _all_ मल्टी-बाइट प्रकार के लिए स्मृति में प्रतिनिधित्व कर रहे हैं प्रभावित करता है। इस मामले में फ्लोट 32-बिट पूर्णांक से अलग नहीं हैं। –

+0

4 बाइट बस रिवर्स ऑर्डर में संग्रहीत हैं। –

+2

मुझे क्या confuses कि चल बिन्दु प्रतिनिधित्व (एक पूर्णांक की तरह) बाइट में splited नहीं है। साइन 1 बिट है, एक्सपोनेंट 8 बिट्स और महत्व 23 है। ऑर्डर को उलट करने से मूल्यों तक पहुंचना मुश्किल हो जाएगा। –

उत्तर

6

कुछ सूत्रों का कहना है कि आईईईई 754 फ्लोट हमेशा छोटे-एंडियन को संग्रहीत करते हैं लेकिन फ्लोटिंग पॉइंट नंबरों के लिए आईईईई 754 विनिर्देश केवल एंडियननेस समस्या को कवर नहीं करता है और मशीन से मशीन में भिन्न हो सकता है। यहाँ चल बिन्दु/बाइट सरणी रूपांतरण के लिए नमूना कोड है:

#include <stdio.h> 

int main(int argc, char** argv){ 
    char *a; 
    float f = 3.14159; // number to start with 

    a = (char *)&f; // point a to f's location 

    // print float & byte array as hex 
    printf("float: %f\n", f); 
    printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \ 
    a[0], a[1], a[2], a[3]); 

    // toggle the sign of f -- using the byte array 
    a[3] = ((unsigned int)a[3])^128; 

    //print the numbers again 
    printf("float: %f\n", f); 
    printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \ 
    a[0], a[1], a[2], a[3]); 

    return 0; 
} 

यह थोड़ा-भारतीय मशीन पर उत्पादन है:

फ्लोट: ३.१,४१,५९० बाइट सरणी: D0: एफ: 49: 40 फ्लोट: -3.141590 बाइट सरणी: D0: F: 49: C0

सैद्धांतिक रूप से, एक बड़ी-एंडियन मशीन पर बाइट्स का क्रम उलट दिया जाएगा।

संदर्भ: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

+2

एक एसपीएआरसी मशीन पर: फ्लोट: 3.1415 9 0, बाइट सरणी: 40: 49: एफ: डी 0; फ्लोट: 3.141560, बाइट सरणी: 40: 49: एफ: 50 – automatthias

+0

यह बिल्कुल ठीक है! – Owl

11

एंडियननेस केवल बाइट्स की एक संपत्ति है जो एकाधिक बाइट्स से बना एक मान बनाती है। चूंकि एक फ्लोटिंग पॉइंट नंबर 4 या 8 बाइट्स लेता है, अंतहीनता आपको बताती है कि उन्हें किस क्रम में पढ़ा जाए। यह ठीक है पूर्णांक मूल्यों के साथ के रूप में ही।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^