एक चरित्र शाब्दिक में बची संख्या के जावा शब्दार्थ क्या हैं, उदाहरण के लिए '\ 15'?


85

कृपया बताएं कि वास्तव में क्या होता है, जब कोड के निम्नलिखित अनुभाग निष्पादित होते हैं:

int a='\15';
System.out.println(a);

यह 13 प्रिंट करता है;

int a='\25';
System.out.println(a);

यह 21 प्रिंट करता है;

int a='\100';
System.out.println(a);

यह 64 प्रिंट करता है।


22
ऐसा लगता है कि यह एक अष्टक के रूप में संख्या की व्याख्या कर रहा है।
निखिल

5
int a='\15'पहले charअष्टक संख्या "15" पर आधारित बनाता है (दशमलव 13, एक चार के रूप में, यह एससीआई "कैरिज रिटर्न") है, जिसे आप फिर एक intपूर्णांक तक ले जाते हैं। यह कानूनी है क्योंकि चार्ट 16 बिट पूर्णांक हैं, इसलिए यह एक सुरक्षित अपस्टॉक है और कास्टिंग द्वारा जावा के बारे में कोई नोटिस जारी नहीं किया गया है। अन्य उत्तर पहले से ही पूरी अष्टा / दशमलव चीज़ को कवर करते हैं।
माइक 'पोमैक्स' कमेरमन्स

जवाबों:


116

आपने एक वर्ण शाब्दिक निर्दिष्ट किया है, जिसे एकल उद्धरणों द्वारा सीमांकित किया गया है, उदाहरण के लिए 'a'(एक स्ट्रिंग शाब्दिक से अलग है, जो "a"एक intचर के लिए दोहरे उद्धरण द्वारा उदासीन है, जैसे ) । जावा 16-बिट charसे 32-बिट पर हस्ताक्षर किए गए से एक स्वचालित चौड़ीकरण करता है int

हालाँकि, जब कोई वर्ण शाब्दिक बैकस्लैश होता है, जिसके बाद 1-3 अंक होते हैं, तो यह वर्ण का एक अष्टक ( आधार / मूलांक 8) होता है। इस प्रकार:

  • \15= 1 × 8 + 5 = 13 (एक गाड़ी वापसी; उसी तरह '\r')
  • \25 = 2 × 8 + 5 = 21 (एनएके चार - नकारात्मक स्वीकृति)
  • \100= 1 × 64 + 0 × 8 + 0 = 64 (@ प्रतीक; वही '@')

चरित्र शाब्दिक और अनुक्रम से बचने के बारे में अधिक जानकारी के लिए, JLS अनुभाग देखें:

3.10.6 से BNF का हवाला देते हुए :

OctalEscape:
    \ OctalDigit
    \ OctalDigit OctalDigit
    \ ZeroToThree OctalDigit OctalDigit

OctalDigit: one of
    0 1 2 3 4 5 6 7

ZeroToThree: one of
    0 1 2 3

3
मैं इसे खंड ३.१०.१ में नहीं पा रहा हूँ .. यह ३.१०.४ में है, चरित्र साहित्य
रफ़ी कमल

1
पूर्णांक शाब्दिक पर अनुभाग अप्रासंगिक है। धारा 3.10.4 देखें । चरित्र और स्ट्रिंग एस्केप अनुक्रम के लिए धारा 3.10.6 भी देखें ।
टेड हॉप

1-3 digits- यह होना चाहिए था 0-3। और इसके 3 अंक वाले ऑक्टल के लिए, दो अंकों वाले ऑक्टल अभी भी हो सकते हैं 0-7। पूर्व। '\ 77' अभी भी मान्य है।
जयमोहन

6
@Jayamohan मैं 1-3 मात्रा में मतलब है, न कि मूल्य
बोहेमियन

@Bohemian। अच्छा जवाब। मेरा सुझाव है कि आप यहाँ ऑक्टल एस्केप शाब्दिक के वाक्य विन्यास को जोड़ेंगे, तो यह अधिक स्पष्ट होगा। :)
रोहित जैन

19

संकेतन \nnnजावा में एक अष्टक वर्ण कोड को दर्शाता है। इसलिए int a = '\15'अष्टक वर्ण 15 का ऑटो-कास्टेड मान असाइन करता है aजो दशमलव 13 है।


5
संकेतन जावा में एक अष्टक संख्या को निरूपित नहीं\nnn करता है । ओपी के कोड में, यह एक अष्टाधारी चरित्र से बचने के क्रम को दर्शाता है। आसपास के उद्धरण चिह्न आवश्यक हैं। वर्ण को असाइनमेंट द्वारा पूर्णांक मान तक चौड़ा किया जाता है। (अष्टक संख्या एक प्रमुख शून्य अंक द्वारा निरूपित की जाती है।)
टेड हॉप

अच्छी बात; उत्तर में ऑटो-कास्ट का उल्लेख करना चाहिए था। उत्तर अपडेट किया गया।
बहमन मोकाकर

6

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.