Sunday, 15 April 2012

c++ - why there is a integer overflow in this multiplication? -


मुझे इस कोड स्निपेट पर हैरान हूं:

  #include & lt; climits & gt; # शामिल करें & lt; iostream & gt; Int main (शून्य) {नामस्थान std; Cout & lt; & lt; "लम्बे अधिकतम" & lt; & lt; LONG_MAX & lt; & lt; endl; लंबे x = 2 * 1024 * 1024 * 1024; Cout & lt; & lt; "2 * 1024 * 1024 * 1024 =" & lt; & lt; एक्स एंड एलटी; & lt; endl; वापसी 0; }   

मैं 2147483648 की अपेक्षा कर रहा था, इसके बजाय मैं मिल रहा हूं अहस्ताक्षरित का उपयोग करने में मदद नहीं लगता है क्या देता है?

  लंबी अधिकतम 9223372036854775807 2 * 1024 * 1024 * -20 = 2147483648    

कुछ एल एस * जोड़ें लंबे x = 2L * 1024L * 1024L * 1024L;

(तकनीकी रूप से, जब तक एक शब्द का शाब्दिक प्रकार लंबा होता है अन्य को पदोन्नत किया जाएगा लंबा )

अतिप्रवाह होता है क्योंकि 2 , आदि प्रकार डिफ़ॉल्ट रूप से int होता है और अतिप्रवाह होता है असाइनमेंट से पहले

देखें जो विभिन्न लीटरल्स को बताते हैं।

No comments:

Post a Comment