2009-11-10 10 views
10

मैं बहुत सरल int विभाजन कर रहा हूं और मुझे अजीब परिणाम मिल रहे हैं।जावा इंटेल डिवीजन मुझे भ्रमित कर रहा है

इस कोड को प्रिंट 2 अपेक्षा के अनुरूप:

public static void main(String[] args) { 
    int i = 200; 
    int hundNum = i/100; 
    System.out.println(hundNum); 
} 

इस कोड को प्रिंट 1के रूप में की उम्मीद नहीं:

public static void main(String[] args) { 
    int i = 0200; 
    int hundNum = i/100; 
    System.out.println(hundNum); 
} 

यहाँ क्या चल रहा है?

(Windows XP प्रो, जावा 1.6 ग्रहण 3.4.1 में चल रहे)

उत्तर

22

मूल्य 0200 एक अष्टाधारी (8 आधार) निरंतर है। यह 128 (दशमलव) के बराबर है।

Section 3.10.1 of the Java Language Specification से:

एक अष्टाधारी अंक एक ASCII अंकों 0 7 के माध्यम से एक या ASCII अंक 0 से अधिक के बाद के होते हैं और एक सकारात्मक शून्य, या नकारात्मक पूर्णांक प्रतिनिधित्व कर सकते हैं।

+2

वाह, मुझे विश्वास नहीं है कि मैंने पहले इसमें भाग नहीं लिया है। मुझे एक बेवकूफ की तरह महसूस हो रहा है। धन्यवाद! – jjnguy

+2

मैंने आपके प्रतिनिधि स्कोर को देखा और हालांकि यह कुछ और होना चाहिए! – moogs

+8

यह सी-आधारित भाषाओं की सबसे परेशान सुविधाओं में से एक है। मैंने कभी किसी को उद्देश्य पर ऑक्टल निरंतर उपयोग नहीं देखा है, लेकिन मैंने देखा है कि यह कई बार समस्याएं पैदा करता है। –

6

मूल्य 0200 एक अष्टाधारी, जो 128 दशमलव में है।

अधिक जानकारी के लिए, Primitive Data Types स्पष्टीकरण के अक्षर खंड देखें।

1

यहां एक दिलचस्प व्यवहार का निरीक्षण किया गया।

यदि मैं Integer.parseInt("0200") करता हूं, तो मुझे 200 ओ/पी के रूप में मिलता है।

हाउज़ैट?

+2

अच्छी तरह से parseInt के लिए एपीआई दस्तावेज़ की जांच करें। यह सब कुछ कहता है: सार्वजनिक स्थैतिक int parseInt (स्ट्रिंग एस) ... स्ट्रिंग तर्क को हस्ताक्षरित दशमलव पूर्णांक के रूप में पार करता है। स्ट्रिंग में वर्ण सभी दशमलव अंक होना चाहिए, सिवाय इसके कि पहला अक्षर ASCII हो सकता है ऋणात्मक मूल्य इंगित करने के लिए ऋण चिह्न '-' ('\ u002D')। – sateesh

+1

parseInt रेडिक्स 10 के साथ एक स्ट्रिंग को पार नहीं करता है। Integer.decode parses 0200 से 128 तक एक कॉल। – Salandur