2010-08-31 15 views
18

मुझे याद है कि एएनएसआई सी ने यह निर्दिष्ट नहीं किया है कि मॉड्यूल ऑपरेटर का संचालन ऋणात्मक होने पर क्या मूल्य वापस किया जाना चाहिए (केवल यह होना चाहिए कि यह लगातार होना चाहिए)। क्या इसे बाद में निर्दिष्ट किया गया था, या यह हमेशा निर्दिष्ट किया गया था और मुझे गलत तरीके से याद है?या तो एएनएसआई सी या आईएसओ सी निर्दिष्ट करता है कि -5% 10 क्या होना चाहिए?

+1

संभव डुप्लिकेट http://stackoverflow.com/questions/11720656/modulo-operation-with -नकारात्मक-संख्या) –

उत्तर

40

C89, पूरी तरह से नहीं (§ 3.3.5/6)। यह ना तो -5 या 5 हो सकता है क्योंकि -5/10 0 या लौट सकते हैं -1 (%/, * और + से जुड़े एक रेखीय समीकरण के संदर्भ में परिभाषित किया गया है):

जब पूर्णांक विभाजित हैं और विभाजन अचूक है, यदि दोनों ऑपरेटरों सकारात्मक हैं / ऑपरेटर का परिणाम बीजगणितीय भाग से कम सबसे बड़ा पूर्णांक है और % ऑपरेटर का परिणाम सकारात्मक है। या तो संकार्य नकारात्मक है, चाहे / ऑपरेटर का परिणाम सबसे बड़ा पूर्णांक बीजीय भागफल या छोटी से छोटी बीजीय भागफल से बड़ा पूर्णांक से कम है कार्यान्वयन से परिभाषित, % का परिणाम का संकेत है के रूप में ऑपरेटर। यदि quotient a/b प्रतिनिधित्व योग्य है, तो अभिव्यक्ति (a/b)*b + a%ba के बराबर होगी।

C99, हाँ (§ 6.5.5/6), परिणाम -5 होना चाहिए:

जब पूर्णांक विभाजित हैं, / ऑपरेटर का परिणाम किसी भी आंशिक भाग के साथ बीजीय भागफल है बाहर किया हुआ। 88) यदि मात्रा a/b प्रतिनिधित्व योग्य है, तो अभिव्यक्ति (a/b)*b + a%ba के बराबर होगी।

88) इसे अक्सर "शून्य की ओर छंटनी" कहा जाता है।


इसी तरह, सी ++ 98 परिणाम में कार्यान्वयन परिभाषित (§ 5,6/4), C89 की परिभाषा निम्नलिखित है, लेकिन कहा गया है कि राउंड की ओर शून्य नियम पसंद किया जाता है,

... यदि दोनों ऑपरेंड गैर-ऋणात्मक हैं तो शेष गैर-ऋणात्मक है; यदि नहीं, शेष का संकेत कार्यान्वयन-परिभाषित 74) है। 1991, जिसमें भागफल हमेशा गोल है:

74) आईएसओ सी में संशोधन की ओर चल काम के अनुसार, पूर्णांक विभाजन के लिए पसंदीदा एल्गोरिथ्म नियम आईएसओ फोरट्रान मानक, आईएसओ/आईईसी 1539 में परिभाषित इस प्रकार है शून्य की तरफ

और वास्तव में यह C++ 0x में मानक नियम (§ 5,6/4) हो जाता है:

... अभिन्न ऑपरेंड के लिए / ऑपरेटर पैदावार त्याग किसी भी आंशिक भाग के साथ बीजीय भागफल ; ...

82) इसे अक्सर शून्य की ओर छंटनी कहा जाता है।

3

KennyTM के जवाब देने के लिए एक छोटे से विस्तार जोड़ने के लिए: सी मानकों कुछ को कॉल करते हैं कार्यान्वयन परिभाषित तो उस कार्यान्वयन है आवश्यक विकल्प बनाता है दस्तावेज़। आम तौर पर यह कंपाइलर या लाइब्रेरी प्रलेखन (मैन पेज, मैनुअल, मुद्रित दस्तावेज़, सीडी पुस्तिका :-) में होगा कोई भी कार्यान्वयन दावा करता है कि सी 8 9 या बाद में को अनुरूपता का दावा करना चाहिए इसे कहीं भी प्रदान करें। ऐसे दस्तावेज़ की तलाश करने का प्रयास करें।

4 सी कार्यान्वयन से परिभाषित व्यवहार


आईएसओ सी का एक अनुरूप क्रियान्वयन व्यवहार के अपने पसंद दस्तावेज़ के लिए आवश्यक है: उदाहरण के लिए gcc के मामले में, यह जीसीसी-जानकारी में है "कार्यान्वयन परिभाषित" नामित प्रत्येक क्षेत्र में। निम्नलिखित आईएसओ/आईईसी 98 99: 1 99 0 और आईएसओ/आईईसी 98 99: 1 999 के मानकों के साथ के साथ ऐसे सभी क्षेत्रों को सूचीबद्ध करता है। कुछ क्षेत्रों को मानक के एक संस्करण में केवल कार्यान्वयन-परिभाषित किया गया है।

कुछ विकल्प प्लेटफार्म (मानक वर्ण एन्कोडिंग समेत) के लिए बाहरी रूप से निर्धारित एबीआई पर निर्भर करते हैं जो जीसीसी निम्नानुसार है; ये नीचे "एबीआई द्वारा निर्धारित" के रूप में सूचीबद्ध हैं। * नोट बाइनरी संगतता: संगतता, और 'http://gcc.gnu.org/readings.html'। कुछ विकल्प प्रीप्रोसेसर मैनुअल में प्रलेखित हैं। * नोट कार्यान्वयन-परिभाषित व्यवहार: (सीपीपी) कार्यान्वयन-परिभाषित व्यवहार। लाइब्रेरी और ऑपरेटिंग सिस्टम (या अन्य पर्यावरण द्वारा फ्रीस्टैंडिंग वातावरण के लिए संकलन करते समय कुछ विकल्प बनाए जाते हैं); विवरण के लिए उनके दस्तावेज़ीकरण का संदर्भ लें।

  • मेनू:

  • अनुवाद कार्यान्वयन ::

  • पर्यावरण कार्यान्वयन ::
  • पहचानकर्ता कार्यान्वयन ::
  • वर्ण कार्यान्वयन ::
  • पूर्णांकों कार्यान्वयन ::
  • फ़्लोटिंग पॉइंट कार्यान्वयन ::
  • Arrays और संकेत कार्यान्वयन ::
  • संकेत कार्यान्वयन ::
  • संरचनाएं यूनियनों enumerations और बिट-क्षेत्रों कार्यान्वयन ::
  • क्वालिफायर कार्यान्वयन ::
  • Declarators कार्यान्वयन ::
  • वक्तव्य कार्यान्वयन ::
  • प्रीप्रोकैसिंग निर्देश कार्यान्वयन ::
  • लाइब्रेरी फ़ंक्शन कार्यान्वयन ::
  • वास्तुकला कार्यान्वयन ::
  • भाषा-विशिष्ट व्यवहार कार्यान्वयन ::
[ऋणात्मक संख्याओं के साथ Modulo आपरेशन] (की