यदि मैं ऐसा कुछ करता हूं तो क्या होगा:
अहस्ताक्षरित int u; Int s; ... s - = u; इस का अपेक्षित व्यवहार क्या है:
1) मान लें कि हस्ताक्षरित पूर्णांक हस्ताक्षर किए पूर्णांक में फिट होने के लिए बहुत बड़ा नहीं है?
2) यह मानते हुए कि अहस्ताक्षरित पूर्णांक पर हस्ताक्षर किए पूर्णांक का अतिप्रवाह होगा?
धन्यवाद।
< P> सामान्य तौर पर, मानक में 5/9 से परामर्श करें। आपके उदाहरण में, हस्ताक्षरित मान अहस्ताक्षरित UINT_MAX + 1), फिर अहस्ताक्षरित परिणाम देने के लिए घटाव मॉड्यूलो UINT_MAX + 1 किया जाता है। s पर हस्ताक्षरित मूल्य के रूप में वापस परिणाम संचित करना एक मानक इंटीग्रल रूपांतरण शामिल है - यह 4.7 / 3 में है यदि मान हस्ताक्षरित int की सीमा में है, तो यह संरक्षित है, अन्यथा मूल्य कार्यान्वयन-परिभाषित है। मैंने कभी भी देखा है कि सभी कार्यान्वयन मॉड्यूलो अंकगणित का उपयोग करके इसे INT_MIN से लेकर INT_MAX पर लागू किया जाता है, हालांकि कृव कहता है कि आपको यह करने के लिए एक चेतावनी मिल सकती है । "स्टंट" कार्यान्वयन जो कि संभवत: आप अहस्ताक्षरित- & gt; हस्ताक्षरित रूपांतरण के लिए अलग-अलग नियम हो सकते हैं। उदाहरण के लिए, यदि क्रियान्वयन में हस्ताक्षरित पूर्णांक के संकेत-परिमाण का प्रतिनिधित्व होता है, तो यह हमेशा मापांक को लेते हुए परिवर्तित नहीं होता है, क्योंकि +/- (UNIT_MAX + 1) / 2 का प्रतिनिधित्व करने का कोई तरीका नहीं है Int। इसके अलावा प्रासंगिक 5.17 / 7 है, "फॉर्म E1 op = E2 की अभिव्यक्ति का व्यवहार E1 = E1 op E2 के बराबर है सिवाय इसके कि E1 का मूल्यांकन केवल एक बार किया जाता है "। इसका मतलब यह है कि यह कहना है कि घटाव को अहस्ताक्षरित int प्रकार में किया जाता है, हमें केवल यह जानना चाहिए कि s - u में किया जाता है, अहस्ताक्षरित int : - = के लिए कोई विशेष नियम नहीं है कि अंकगणित एलएचएस के प्रकार में किया जाना चाहिए।
Comments
Post a Comment