UINT_MAX + 1u
के लिए सी में परिभाषित व्यवहार क्या है? यह मानना कितना सुरक्षित है कि यह शून्य है?UINT_MAX + 1 क्या बराबर है?
उत्तर
मानक से (सी 11, 6.2.5/9, जोर मेरा):
[...] एक अभिकलन अहस्ताक्षरित ऑपरेंड को शामिल कर सकते हैं कभी नहीं अतिप्रवाह, क्योंकि एक परिणाम है कि द्वारा प्रतिनिधित्व नहीं किया जा सकता परिणामस्वरूप हस्ताक्षरित पूर्णांक प्रकार कम मॉड्यूलो संख्या है जो हो सकता है जो परिणामी प्रकार द्वारा दर्शाया गया सबसे बड़ा मान से अधिक है।
तो UINT_MAX
10
है:
(10 + 1) % (10 + 1) == 0
तो, हाँ, यह सुरक्षित यह शून्य है ग्रहण करने के लिए है।
मानक जनादेश जो 'UINT_MAX' (और अन्य हस्ताक्षरित पूर्णांक प्रकारों के अधिकतम मान)' 2^एन -1' है, जहां 'एन' प्रकार की चौड़ाई है, इसलिए 10 एक बुरा उदाहरण है (लेकिन यह ' मुझे अपवित्रता से रोकें)। –
2^3.4594316186372973 - 1 – Vortico
इसके अलावा, '(हस्ताक्षरित) -1 == UINT_MAX'; उत्तरार्द्ध प्रीप्रोसेसर स्थितियों में उपयोग किया जा सकता है, जबकि '(हस्ताक्षरित) -1' का केवल संकलक द्वारा मूल्यांकन किया जा सकता है। – Loic
यह सुरक्षित है। सी मानक गारंटी देता है कि हस्ताक्षर पूर्णांक अतिप्रवाह शून्य में लपेटने के परिणाम।
और सी सख्ती से बोलते हुए, हस्ताक्षरित पूर्णांक कभी हस्ताक्षरित पूर्णांक ओवरफ़्लो ओवरफ़्लो नहीं करते हैं। – ouah
@ouah इस मामले में, मुझे क्या कहना चाहिए कि वे करते हैं? –
@ एच 2CO3: आप कह सकते हैं कि वे चारों ओर लपेटते हैं। –
सुरक्षित होना चाहिए:
नोट अहस्ताक्षरित पूर्णांक अतिप्रवाह अच्छी तरह से परिभाषित किया गया है।
इसके अलावा, यहां पर whole question है।
यह बल है कि जब अहस्ताक्षरित व्यवहार अच्छी तरह से परिभाषित किया गया है, पर हस्ताक्षर किए पूर्णांक अतिप्रवाह लायक है नहीं है: पूर्णांक
सी प्रोग्रामिंग भाषा में, पर हस्ताक्षर किए ओवरफ्लो अपरिभाषित व्यवहार का कारण बनता है, जबकि हस्ताक्षरित पूर्णांक ओवरफ़्लो संख्या को कम करने के लिए modu कम करता है लो विषय पर दो
एक बहुत अच्छा कागज के एक शक्ति: C/C++ पूर्णांक संचालन के
उदाहरण और उनके परिणामों
Expression Result
---------- ------
UINT_MAX+1 0
LONG_MAX+1 undefined
INT_MAX+1 undefined
SHRT_MAX+1 SHRT_MAX+1 if INT_MAX>SHRT_MAX, otherwise undefined
char c = CHAR_MAX; c++ varies
-INT_MIN undefined
(char)INT_MAX commonly -1
1<<-1 undefined
1<<0 1
1<<31 commonly INT_MIN in ANSI C and C++98; undefined in C99 and C++11
1<<32 undefined
1/0 undefined
INT_MIN%-1 undefined in C11, otherwise undefined in practice
- 1. "सीवीएस निर्यात" के बराबर गिट (1) क्या है?
- 2. PHP स्ट्रिंग दिनांक + 1 दिन बराबर है?
- 3. क्या Python में बराबर बराबर है?
- 4. स्कैला: क्या == डिफ़ॉल्ट बराबर है?
- 5. योजना के बराबर अनपॅकिंग के बराबर क्या है?
- 6. एनएसएएसएसर्ट 1 क्या है?
- 7. घटाव के लिए (+1) के बराबर क्या है, क्योंकि (-1) को ऋणात्मक संख्या के रूप में देखा जाता है?
- 8. `अंतराल (1 9.9 * 100)` बराबर `1989` क्यों है?
- 9. एक्सेल वीबीए में "! =" के बराबर क्या है?
- 10. गो के बराबर क्या है [0]?
- 11. क्या स्कैला में SuppressWarnings के बराबर है?
- 12. perl $ | = 1; यह क्या है?
- 13. लाइन-ऊंचाई क्या है: 1?
- 14. क्या पाइथोनिक के बराबर बराबर है "अगर __name__ ==" __main__ ": मुख्य()"?
- 15. क्या जावास्क्रिप्ट के लागू() के बराबर बराबर है?
- 16. क्या सी ++ में जावा बराबर विधि के बराबर है?
- 17. PHP के preg_quote के बराबर क्या है?
- 18. JQuery: "$ (" # myDIV li ") के गैर-JQuery बराबर क्या है। Eq (1)"?
- 19. TSQL पर String.Join के बराबर क्या है?
- 20. mysql में REGEXP_SUBSTR के बराबर क्या है?
- 21. हंक # 1 1 पर विफल। इसका क्या मतलब है?
- 22. SQL सर्वर में 1/1/1753 का महत्व क्या है?
- 23. "- [1,]" का अर्थ क्या है "if (! - [1,] &&! Window.XMLHttpRequest)"?
- 24. क्या प्रत्येक एलएल (1) व्याकरण भी एक एलआर (1) है?
- 25. जावास्क्रिप्ट में, [1, 2] == [1, 2] या ({a: 1}) == ({a: 1}) झूठी क्यों है?
- 26. मैक ओएस एक्स लिनक्स झुंड के बराबर (1) कमांड
- 27. पाइथन के आउटपुट के रूबी समकक्ष क्या है [: - 1]?
- 28. apache mod_rewrite node.js के बराबर बराबर है?
- 29. डब्ल्यूटीसीएफ एचटीपीकॉन्टेक्स्ट.कुरेंट.रूक्वेस्ट.राउउआरएल के बराबर क्या है?
- 30. क्या विंडोज़ पर मेक के बराबर है?
@JoshPetitt : यह अभी भी शून्य से शून्य है। 'UINT_MAX + 1u' का मूल्यांकन एक हस्ताक्षरित पूर्णांक के रूप में किया जाता है, जिसके परिणामस्वरूप' 0' होता है, जिसे तब 'लंबे समय तक' में संग्रहीत किया जाता है। ;-) – netcoder
@netcoder, मेरी विंडोज 64-बिट मशीन पर आप वास्तव में सही हैं। मेरा आंतरिक कंपाइलर दोषपूर्ण है। :-) –