2009-02-25 12 views
7

मैं फ्लोट लाइब्रेरी पर आसान पहुंच प्राप्त करने के लिए बिटफील्ड का उपयोग कर रहा हूं, मैं कोई एफपीयू के साथ एक माइक्रोक्रोनरोलर बनाने की कोशिश कर रहा हूं।सी में बिटफील्ड का उपयोग करने का सही तरीका क्या है?

समस्या यह है कि मैं इसे बिटफील्ड के साथ काम नहीं कर सकता। एक नज़र डालें:

typedef struct 
{ 
    union{ 
    unsigned long mantissa: 23; 
    unsigned long exponent: 8; 
    unsigned long sign: 1; 
    float all; 

     }; 

}_float __attribute__((__packed__)); 

समस्या यह है कि यह क्रमशः छोर से 1,8,23 बिट्स के रूप में bitfields समझता है जब मैं का उपयोग या कुछ भी बदलने की कोशिश है। हालांकि यह अंत से 23 बिट्स होना चाहिए, फिर 8 बिट्स और फिर आखिरी बिट होना चाहिए। जब तक मैंने बिटफील्ड के उपयोग को पूरी तरह गलत समझा नहीं है। मैंने सोचा कि पैक का उपयोग समस्या को हल करेगा लेकिन जैसा कि आप देख सकते हैं कि यह नहीं था।

किसी भी मदद की वास्तव में सराहना की जाएगी। मैं इस साइट पर एक से अधिक बार गुगल रहा हूं, इसलिए मुझे बहुत उम्मीद है।

+1

बिटफील्ड का उपयोग करने का सही तरीका बिटफील्ड का उपयोग नहीं करना है। –

उत्तर

17

आप अपने संघ के अंदर एक संरचना खो सकते हैं।

typedef struct 
{ 
    union{ 
     struct { 
      unsigned long mantissa: 23; 
      unsigned long exponent: 8; 
      unsigned long sign: 1; 
     } float_parts; 
     float all; 
    }; 
}_float __attribute__((__packed__)); 

ध्यान दें कि मंटिसा/एक्सपोनेंट और साइन का क्रम सीपीयू की अंतहीनता पर निर्भर करता है।

+0

आपके इनपुट के लिए धन्यवाद लेकिन संघ के अंदर एक संरचना क्यों जोड़ें? मैंने फ्लोट के साथ फ्लोट के हिस्सों का संघ बनाया ताकि यह सुनिश्चित किया जा सके कि प्रत्येक बिटफील्ड फ्लोट के उचित भाग से मेल खाता है। क्या वह पर्याप्त नहीं है? –

+1

एक संघ सभी सदस्यों को एक ही स्मृति साझा करेगा। मुझे नहीं लगता कि बिटफील्ड का उपयोग इस व्यवहार को बदल देगा, इसलिए आपके सभी बिटकफील्ड बिट 0 पर शुरू होते हैं, जैसे कि "सब" फ्लोट करता है। उन्हें एक संरचना में डालकर अनुक्रमिक रूप से निर्धारित किया जाता है। – rmeador

+0

आप बिल्कुल सही थे! यही जरूरी था। मैं तब संघ की मेरी समझ को दोषी ठहराता हूं :)। धन्यवाद दोस्त, अब मैं इच्छा पर अपने फ्लोट के किसी भी हिस्से तक पहुंचने में सक्षम हूं। –

0

समस्या यह है कि यह एक संघ है। यह 'संरचना' होना चाहिए।

0

यदि आप एक ग्लिबैक मंच पर हैं तो आप ieee754.h शीर्षलेख फ़ाइल पर एक नज़र डाल सकते हैं। यह अंतहीन सामान के बारे में परवाह करता है। यदि नहीं, तो अभी भी इसे देखने के लायक है।

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