मैं किसी ऐसे व्यक्ति से कोड भरवा रहा हूं, जो मानता है कि एक अनिर्दिष्ट पूर्णांक को उसी प्रकार के किसी अन्य पूर्णांक से घटाते हुए समस्या आती है, जब परिणाम नकारात्मक होगा। इस तरह यह कोड गलत होगा भले ही यह अधिकांश आर्किटेक्चर पर काम करने के लिए हो।
unsigned int To, Tf;
To = getcounter();
while (1) {
Tf = getcounter();
if ((Tf-To) >= TIME_LIMIT) {
break;
}
}
यह सी मानक से केवल वही प्रासंगिक उद्धरण है जो मुझे मिल सकता है।
अहस्ताक्षरित ऑपरेंड को शामिल करने वाली गणना कभी भी because ओव से अधिक नहीं हो सकती है, क्योंकि परिणामी अहस्ताक्षरित पूर्णांक प्रकार द्वारा प्रतिनिधित्व नहीं किया जा सकता एक परिणाम modulo संख्या को कम कर दिया जाता है जो कि सबसे बड़े मूल्य से अधिक होता है जिसे परिणामी प्रकार द्वारा दर्शाया जा सकता है।
मुझे लगता है कि कोई यह कहने का मतलब निकाल सकता है कि जब सही ऑपरेंड बड़ा होता है तो ऑपरेशन को मोडुलो ट्रंकेटेड नंबरों के संदर्भ में सार्थक होने के लिए समायोजित किया जाता है।
अर्थात
0x0000 - 0x0001 == 0x 1 0000 - 0x0001 == 0xFFFF
कार्यान्वयन आश्रित हस्ताक्षरित शब्दार्थ का उपयोग करने के विरोध में:
0x0000 - 0x0001 == (अहस्ताक्षरित) (0 + -1) == (0xFFFF लेकिन साथ ही 0xFFFE या 0x8001)
कौन सी या कौन सी व्याख्या सही है? क्या यह बिल्कुल भी परिभाषित है?