2012-02-29 30 views
5

में दो INT_MAX numbes का गलत उत्पाद मेरे मामले में, दो INT_MAX संख्याओं का उत्पाद 296447233 है, जो गलत है।सी/सी ++

long long int product = 0; 
product = 2137483647 * 2137483647; 
printf("product: %lli\n", product); 

मैं क्या गलत कर रहा हूं, और इसे कैसे ठीक किया जाए ?? धन्यवाद!

+2

उम व्यवहार करता है की कोशिश करो। ..INT_MAX 2147483647 (32-बाय के लिए है टी इंक)। आप 10000000 से शर्मीली हैं। –

+0

ओह, नहीं !!!!!! हाँ, मुझे INT_MAX गलत मिला। इस पर ध्यान दिलाने के लिए धन्यवाद ! – newprint

उत्तर

14

आपके 2137483647 दोनों int प्रकार के हैं। तो वे उस प्रकार और अतिप्रवाह रहते हैं।

product = 2137483647LL * 2137483647LL; 

या डाली:

उन्हें long long रों बनाओ

product = (long long)2137483647 * 2137483647; 
+0

तो, मूल रूप से, दो इंट्स का उत्पाद सिर्फ बहती है, भले ही मैं इसे लंबे समय तक int निर्दिष्ट कर रहा हूं? जवाब के लिए धन्यवाद ! – newprint

+4

सही। आपके उदाहरण में, रूपांतरण * * गुणा के बाद होता है। इसलिए यह 'लंबे समय तक' पदोन्नत होने से पहले बहती है। – Mysticial

+1

कंपाइलर दो नंबरों को इनट्स के रूप में मानता है, गणित करता है और फिर मान को 'उत्पाद' में डालने के बारे में सोचता है। –

6

product = 2137483647LL * 2137483647LL; 

सुनिश्चित करना है कि संकलन संख्या के रूप में लंबे

+0

ओह और मैंने 'एलएल' की ओर इशारा करने के लिए +1 किया। – Mysticial