embedded - C language: #DEFINEd value messes up 8-bit multiplication. Why? -
मेरे पास निम्न कोड कोड है:
# परिभाषित PRR_SCALE 255 ... uint8_t = 3; Uint8_t b = 4; Uint8_t prr; Prr = (PRR_SCALE * ए) / बी; Printf ("prr:% u \ n", पीआरआर); अगर मैं इसे संकलित करता हूं (एक एमएसपी 430 प्लेटफॉर्म कंपाइलर का प्रयोग करके, एक छोटे से एम्बेडेड ओएस के लिए कहा जाता है) परिणाम 0 होता है, जबकि 1 9 1 की उम्मीद थी। (Uint8_t typedef_a एक अहस्ताक्षरित अक्षर के रूप में टाइप किया गया है) < / P>
अगर मैं इसे बदलता हूं:
uint8_t a = 3; Uint8_t b = 4; Uint8_t c = 255; Uint8_t prr; पीआरआर = (सी * ए) / बी; Printf ("prr:% u \ n", पीआरआर); यह सही ढंग से काम करता है और 1 9 1 का प्रिंट करता है।
एक सामान्य संस्करण को इस सामान्य रूप से एक उबंटू बॉक्स पर जीसीसी का उपयोग करके दोनों मामलों में सही मूल्य प्रिंट करता है। < / P>
मुझे पूरा यकीन नहीं है कि यह क्यों है मैं पहले से एक चर में DEFINEd मान को निर्दिष्ट करके इसे रोक सकता था, लेकिन मैं ऐसा नहीं करना चाहता था।
क्या कोई यह जानता है कि यह क्यों है? शायद इसके बारे में कुछ और जानकारी के लिंक के साथ?
संक्षिप्त जवाब: आप संकलक बागी हैं (ओवरफ्लो में कोई समस्या नहीं है, जैसा कि अन्य सुझाव दिए गए हैं।)
दोनों ही मामलों में, अंकगणित int में किया जाता है, जो कम से कम 16 बिट लंबा होने की गारंटी है। पूर्व स्निपेट में ऐसा इसलिए है क्योंकि 255 एक int है, बाद में यह की वजह से है।
जैसा कि आपने नोट किया है, जीसीसी इसे सही ढंग से संभालता है।
Comments
Post a Comment