प्रश्न Bitshift and integer promotion? के समान प्रश्न, मेरे पास बाएं बिट्सफिफ्ट का उपयोग करते समय पूर्णांक पदोन्नति के बारे में एक प्रश्न है।ऑपरेटर के साथ पूर्णांक पदोन्नति <<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
इस मामले में, हो जाएगा value8 पहले unsiged पूर्णांक को बढ़ावा देने या इसे विशिष्ट कार्यान्वयन है?
6.5.7 बिटवाइस पारी ऑपरेटरों ... 3 sematics ...
पूर्णांक प्रोन्नति ऑपरेंड में से प्रत्येक पर प्रदर्शन कर रहे हैं। परिणाम का प्रकार प्रमोटेड बाएं ऑपरेंड की है। यदि दाएं ऑपरेंड का मान ऋणात्मक है या प्रचारित बाएं ऑपरेंड की चौड़ाई से अधिक या बराबर है, तो व्यवहार अपरिभाषित है।
इसमें कहा गया है कि "पूर्णांक प्रोन्नति ऑपरेंड में से प्रत्येक पर प्रदर्शन कर रहे हैं।", लेकिन पदोन्नति नियम यहां क्या है?
मुझे लगता है कि यह convert to int if lesser rank than int
होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।
मैं यह पूछता हूं, क्योंकि एक कंपाइलर (रेनेसास एनसी 30वा) int को बढ़ावा नहीं देता है, इसलिए परिणाम हमेशा मेरे नमूने के लिए 0 होता है।
इस प्लेटफ़ॉर्म पर, एक char 8 बिट चौड़ा और int 16 बिट्स है।
यदि मान 8 को प्रचारित नहीं किया गया है, तो यह एक कंपाइलर बग है। –
वास्तव में यह सवाल है, क्या यह एक बग या कार्यान्वयन विशिष्ट है? – jeb
@jeb मेरे उत्तर में संपादन देखें, कुछ संकलक डिफ़ॉल्ट रूप से पूर्णांक प्रचार अक्षम करते हैं और इसे संकलक दस्तावेज़ में दस्तावेज करते हैं। आपको कंपाइलर दस्तावेज में आईएसओ अनुरूपता की तलाश करनी है। – ouah