2015-11-20 8 views
5

में बिट वार शिफ्ट ऑपरेटर का उपयोग करें क्योंकि मैं ConcurrentHashMap स्रोत कोड के माध्यम से जा रहा था, मुझे बहुत कम बुद्धिमान शिफ्ट ऑपरेटर का सामना करना पड़ा है। कुछ स्थिरांक बनाने के लिए लागू होते हैं और कुछ चर पर होते हैं।ConcurrentHashMap

static final int MAXIMUM_CAPACITY = 1 << 30; 
static final int MAX_SEGMENTS = 1 << 16; // slightly conservative 
long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE; 

मैं समझने के लिए, अगर MAXIMUM_CAPACITY की तरह निरंतर सीधे तो बिटवाइज़ पारी ऑपरेटर का उपयोग करने का इस्तेमाल होता है क्या घोषित किया जा सकता पा रहा हूँ।

+3

मुझे लगता है कि डेवलपर्स के पास दशमलव के बजाय बाइनरी में सोचते समय उन मूल्यों को परिभाषित करने में आसान समय था। '1 << 30' का बाइनरी प्रतिनिधित्व' 100000000000000000000000000000000' है, जो एक तरह से, दशमलव '1073741824' से" सरल "दिखता है। – Mena

उत्तर

3

वे दशमलव फॉर्म (आधार 10) में संख्या का उपयोग नहीं कर रहे हैं। इसके बजाए, वे कह रहे हैं "यह 30 पीछे 0 बिट" के साथ एक संख्या है, जिसका अर्थ है कि बेस 2 सिस्टम के लिए संख्या का उपयोग किया जाता है।

बिट्सफ़िफ्टिंग मूल्य के पाठक को सूचित करना आसान बनाता है। आधार 10 में, यह 1073741824 का प्रतिनिधित्व करेगा, जो एक यादृच्छिक संख्या की तरह लगता है।


यह प्रोग्रामिंग में आम है।

int secondsInDay = 60 * 60 * 24; 

हम एक मिनट में सेकंड के राशि, एक घंटे में मिनट के राशि से गुणा, एक दिन में घंटे के राशि से गुणा प्रतिनिधित्व कर रहे हैं: उदाहरण के लिए।

हम केवल 86400 डाल सकते थे, लेकिन अगर हम एक घंटे में कितने मिनट (किसी अन्य ग्रह पर समय का प्रतिनिधित्व करने के लिए) बदलना चाहते हैं तो क्या होगा? मूल्य को बदलने के लिए आपको इसे मैन्युअल रूप से गणना करना होगा।

दूसरी तरफ, ऊपर दिखाए गए अनुसार इकाइयों में इसे तोड़कर, हम दिन में कितने मिनटों को बदलने के लिए मध्य 60 बदल सकते हैं।

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