2015-11-25 4 views
5

7.8.3 में क्यों करता है। शेष ऑपरेटर के बारे में सी # विशिष्टता की यह निम्नलिखित राज्यों:int.MinValue% -1 कारण और ओवरफ़्लो एक्सेप्शन

बाईं संकार्य छोटी से छोटी पूर्णांक या लंबे मूल्य और सही संकार्य -1 है, तो एक System.OverflowException फेंक दिया है।

इसलिए int.MinValue % -1 एक OverflowException में परिणाम होगा। मैं समझने की कोशिश क्यों कर रहा हूं क्यों?

+0

ध्यान दें कि जावा में, परिणाम विनिर्देशों द्वारा '0' है और सी ऑपरेशन अपरिभाषित व्यवहार का आह्वान करता है। – ouah

उत्तर

6

दो पूरक गणित में, डेटा प्रकारों (-2 ** एन) से (2 ** एन -1) (जहां 'एन' डेटा प्रकार में बिट्स की संख्या से कम 1 है) से एक सीमा है।

उदाहरण के लिए, 16-बिट हस्ताक्षरित पूर्णांक की -32768 (-2 ** 15) से 32767 (2 ** 15 - 1) तक मान्य सीमा होती है।

-32768/-1 = +32768 जो 16-बिट हस्ताक्षरित पूर्णांक के लिए मान्य सीमा से अधिक है।

+2

गणितीय रूप से 'int.MinValue% -1' 0, या -1 (या संभव 1) होगा। यह 16-बिट हस्ताक्षरित पूर्णांक के लिए मान्य सीमा से अधिक नहीं है। – chux

+2

लेकिन यह आमतौर पर शेष को खोजने के बाद पहली बार विभाजित करके गणना की जाती है। – keithmo

+0

सहमत हैं, लेकिन भाषा विनिर्देश के लिए उस आदेश की आवश्यकता है? – chux

संबंधित मुद्दे