आप हेक्साडेसिमल या अष्टक में पूर्णांक स्थिरांक को कैसे परिभाषित कर सकते हैं, इसके समान, क्या मैं इसे बाइनरी में कर सकता हूं?
मैं मानता हूं कि यह वास्तव में आसान (और बेवकूफ) प्रश्न है। मेरी Google खोजें खाली आ रही हैं।
आप हेक्साडेसिमल या अष्टक में पूर्णांक स्थिरांक को कैसे परिभाषित कर सकते हैं, इसके समान, क्या मैं इसे बाइनरी में कर सकता हूं?
मैं मानता हूं कि यह वास्तव में आसान (और बेवकूफ) प्रश्न है। मेरी Google खोजें खाली आ रही हैं।
जवाबों:
तो, जावा एसई 7 की रिलीज के साथ, बाइनरी नोटेशन बॉक्स से बाहर मानक है। यदि आप बाइनरी की एक अच्छी समझ रखते हैं, तो वाक्य रचना काफी सीधा और स्पष्ट है:
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
और विशेष रूप से वर्ग स्तर के चर को बायनेरिज़ घोषित करने के बिंदु पर, बाइनरी नोटेशन का उपयोग करके स्थिर चर को शुरू करने में कोई समस्या नहीं है:
public static final int thingy = 0b0101;
बस सावधान रहें कि बहुत अधिक डेटा वाले नंबरों को ओवरफ्लो न करें, वरना आपको एक कंपाइलर त्रुटि मिलेगी:
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
अब, यदि आप वास्तव में फैंसी प्राप्त करना चाहते हैं, तो आप जावा 7 में उस अन्य स्वच्छ नई सुविधा को जोड़ सकते हैं जिसे अंडरस्कोर के साथ संख्यात्मक शाब्दिक के रूप में जाना जाता है। शाब्दिक अंडरस्कोर के साथ बाइनरी नोटेशन के इन फैंसी उदाहरणों पर एक नज़र डालें:
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
अब यह अच्छा और साफ नहीं है, उच्च पठनीय का उल्लेख नहीं है?
मैंने TheServerSide पर विषय के बारे में लिखे एक छोटे से लेख से इन कोड स्निपेट को खींचा। अधिक जानकारी के लिए इसे आज़ाद करें:
जावा 7 और बाइनरी नोटेशन: OCP जावा प्रोग्रामर (OCPJP) परीक्षा में माहिर
जावा 7 में:
int i = 0b10101010;
जावा के पुराने संस्करणों में कोई बाइनरी शाब्दिक नहीं हैं (विकल्पों के लिए अन्य उत्तर देखें)।
_
int i = 0b1010_1010_0011;
जावा में कोई बाइनरी शाब्दिक नहीं हैं, लेकिन मुझे लगता है कि आप ऐसा कर सकते हैं (हालांकि मुझे यह बात दिखाई नहीं देती है):
int a = Integer.parseInt("10101010", 2);
एड स्वांगरेन का जवाब
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
ठीक काम करता है। मैंने long
इसके बजाय int
उपयोग किया और थोड़ा सा मुखौटा के रूप में संभव उपयोग को स्पष्ट करने के लिए संशोधक को जोड़ा। हालांकि, इस दृष्टिकोण के साथ दो असुविधाएं हैं।
मैं वैकल्पिक दृष्टिकोण का सुझाव दे सकता हूं
public final static long mask12 = 1L << 12;
यह अभिव्यक्ति स्पष्ट करती है कि 12 वीं बिट 1 है (गिनती 0 से शुरू होती है, दाईं से बाईं ओर); और जब आप माउस कर्सर मँडराते हैं, टूलटिप
long YourClassName.mask12 = 4096 [0x1000]
ग्रहण में दिखाई देता है। आप अधिक जटिल स्थिरांक परिभाषित कर सकते हैं:
public final static long maskForSomething = mask12 | mask3 | mask0;
या स्पष्ट रूप से
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
चर का मान maskForSomething
अभी भी विकास के समय ग्रहण में उपलब्ध होगा।
स्थिरांक घोषित करें:
public static final int FLAG_A = 1 << 0;
public static final int FLAG_B = 1 << 1;
public static final int FLAG_C = 1 << 2;
public static final int FLAG_D = 1 << 3;
और उनका उपयोग करें
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Google पर "जावा शाब्दिक वाक्य रचना" की खोज करें और आप कुछ प्रविष्टियों के साथ आते हैं।
एक ऑक्टल सिंटैक्स (0 के साथ आपका नंबर उपसर्ग है), "0x" उपसर्ग के साथ दशमलव सिंटैक्स और हेक्साडेसिमल सिंटैक्स। लेकिन बाइनरी नोटेशन के लिए कोई सिंटैक्स नहीं।
कुछ उदाहरण:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
(बेहतर तत्परता के लिए byte b = 0b0100_0001
)।
यदि आप बहुत सारे बाइनरी के साथ गड़बड़ करना चाहते हैं तो आप कुछ स्थिरांक को परिभाषित कर सकते हैं:
public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;
आदि।
या
public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;