2017-02-05 8 views
7

मैं GitHub पर ओपन सोर्स प्रोजेक्ट में से एक को देख रहा था और मैं जावा में कोड की निम्न पंक्ति पाया का टुकड़ा के बारे में चिंता,कोड

static byte[] byteArray = new byte[1 << 11]; 

यहाँ हम जानते हैं, कि 1 < < 11 लेकिन 2048 कुछ भी नहीं है तो मैं सीधे, के रूप में पालन इसकी लंबाई = 2048 देकर सरणी को प्रारंभ कर सकते हैं

static byte[] byteArray = new byte[2048];

तो क्यों ऐसा लगता है कि 1 < < 11 के बजाय 2048 प्रत्यक्ष रूप से लिखा गया है।

+0

शुद्ध रूप से शैली का मामला। वे 2048, या 0x800 लिख सकते थे, या जावा 7 और बाद में 0b100000000000 में, लेकिन स्पष्ट रूप से उन्हें लगा कि यह जोर देने के लिए उपयोगी था कि एकमात्र बिट सेट थोड़ा 11 है (और शायद जावा 7 से पहले कोडिंग कर रहे थे या जावा 7 की बाइनरी से अनजान थे शाब्दिक)। –

+0

हो सकता है कि वे केवल संख्या डालने के बजाय बिट शिफ्टिंग जादू में अधिक इच्छुक हों। हालांकि यह पूरी तरह से एक मामला है कि कैसे एक कोड। : पी –

उत्तर

5

थोड़ा बुद्धिमान ऑपरेशन का उपयोग करने का कारण यह स्पष्ट करना है कि यह 2 की शक्ति है। मैंने लोगों को निरंतर भ्रमित कर दिया है। जैसे 80 9 6 जो 8192 और 40 9 6 का संयोजन है।

मुझे क्या करना पसंद है << 10 या << 20 केबी और एमबी के लिए उपयोग करें। जैसे 2 << 102 KB

+0

कुछ 'Math.pow (2, 11)' की तरह कुछ और पठनीय है, है ना? – Divers

+1

@ डाइवर्स पठनीय स्वाद का विषय है, लेकिन 'Math.pow' एक' डबल 'है, इसलिए मैं नहीं कहूंगा, –

+0

@ पीटर इसे' int' –