2015-06-22 7 views
5

कितनी तेजी से स्वयं इसके अलावा विकसित होगा के बारे में उत्सुक, मैंने लिखा जावा में एक त्वरित छोटे से पाश को देखने के लिए:यह आत्म जोड़ बराबर 0 क्यों है?

int count = 1; 
while(true){ 
    System.out.println(count); 
    count += count; 
} 

उत्पादन अप्रत्याशित था:

0 
0 
0 
0 
0 
... 

ऐसा क्यों है? count 1 तक शुरू किया गया है, इसलिए आंतरिक जोड़ count + count या 1 + 1 कर रहा होना चाहिए। परिणाम 0 क्यों है?

+8

पाश पुनरावृत्तियों के बीच रखो नहीं एक छोटी 'Thread.sleep' था। –

+1

कल्पना कीजिए कि एक 'int x' मान है जो जब आप' x + = x' ओवरफ़्लो को '0' पर पूर्ण करते हैं। इसके बाद आपके परिणाम क्या होंगे? – Pshemo

+0

यह क्या होगा @SotiriosDelimanolis –

उत्तर

13

आपके द्वारा पोस्ट किया गया आउटपुट आउटपुट की पिछली रेखाएं है, न कि पहली 30-31 लाइनें। यह इतनी तेजी से चला जाता है कि पहले 31 पुनरावृत्तियों के बाद यह INT MAX से अधिक हो जाता है और 0 में इसके परिणाम भी होते हैं। याद रखें कि एक हस्ताक्षरित पूर्णांक का अधिकतम मान 2^31 है, या साइन बिट के साथ 4 बाइट्स है।

while(true) { के बजाय

while(count>0) { प्रयास करने पर आपको पहले कुछ पुनरावृत्तियों देखने को मिलता है जब यह 0.

+1

हाँ, समझ में आता है। परिणाम 32 वें पुनरावृत्ति पर 0 पर जाना चाहिए, जो हस्ताक्षरित पूर्णांक में बिट्स की संख्या के अनुरूप है। धन्यवाद। –

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