2015-10-19 14 views
5
int x = 10; int y = (x.hashcode() & 0xfffffff); 

कैसे कोड ऊपर बना देता है y हमेशा सकारात्मक है बनाने के लिए? धन्यवाद!कैसे एक hashCode (पूर्णांक मान) सकारात्मक

+3

यदि यह हैश कोड होना है, तो आप यह क्यों सुनिश्चित करना चाहते हैं कि यह सकारात्मक है? क्यों यह पहले से ही ऐसा कर रहा है - आप नीचे 32 बिट्स रख रहे हैं; शीर्ष 4 बिट हमेशा साफ़ हो जाएंगे। शीर्ष बिट स्पष्ट के साथ कोई भी 'int' गैर-ऋणात्मक है। आप 'x.hashCode() और 0x7fffffff' (उर्फ' x.hashCode() और Integer.MAX_VALUE') –

+0

@ जोनस्केट का उपयोग करके अधिक जानकारी खोए बिना इसे प्राप्त कर सकते हैं। मुझे लगता है कि वह पूछ रहा है कि बिटवाई ऑपरेशन आपको क्यों प्राप्त करेगा सकारात्मक मूल्य –

+0

@ स्लेमैन जेनीडी: वैसे ही सवाल का शरीर कहता है (और मैं टिप्पणी में समझाता हूं) लेकिन सवाल का * शीर्षक * सकारात्मक मूल्य प्राप्त करने के लिए कहता है। –

उत्तर

9

x.hashcode() & 0xfffffff साइन बिट बंद कर देगा। Math.abs का उपयोग यहां नहीं किया जाता है क्योंकि x.hashCodeInteger.MIN_VALUE के बराबर है जो hashtable's सरणी ArrayOutOfBoundException फेंक देगा जो मजेदार नहीं है।

@ जोनस्केट टिप्पणी से: यह केवल साइन बिट बंद नहीं करता है, यह अगले तीन बिट्स को साफ़ करता है।

लेकिन हैश कोड के साथ हम हर समय टक्कर से निपटते हैं, इसलिए इसे ठीक माना जाता है।

+7

यह * बस * साइन बिट बंद नहीं करता है, आपको याद है - यह अगले तीन बिट्स को भी साफ़ करता है ... –

+0

@ जोन्ससेट बहुत सच है। –

+0

स्लेमेन, क्या आप उस 'x.hashcode() और 0xfffffff' कथन के आंतरिक कार्यकलापों के बारे में कुछ और बता सकते हैं? हुड के नीचे क्या हो रहा है? – Sahand

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