जावा में कुछ हैश फ़ंक्शंस के लिए मान को एक हस्ताक्षरित पूर्णांक के रूप में देखना अच्छा लगेगा (उदा। अन्य कार्यान्वयन की तुलना के लिए) लेकिन जावा केवल हस्ताक्षरित प्रकारों का समर्थन करता है। हम इस तरह के रूप में एक "अहस्ताक्षरित" long
को एक हस्ताक्षरित int
परिवर्तित कर सकते हैं:हस्ताक्षरित पूर्णांक को एक हस्ताक्षरित लंबे समय में परिवर्तित करने का सबसे अच्छा तरीका?
public static final int BITS_PER_BYTE = 8;
public static long getUnsignedInt(int x) {
ByteBuffer buf = ByteBuffer.allocate(Long.SIZE/BITS_PER_BYTE);
buf.putInt(Integer.SIZE/BITS_PER_BYTE, x);
return buf.getLong(0);
}
getUnsignedInt(-1); // => 4294967295
हालांकि, इस समाधान क्या हम वास्तव में कर रहे हैं के लिए overkill की तरह लगता है। क्या एक ही चीज़ हासिल करने का एक और अधिक प्रभावी तरीका है?
+1 दाएं। नहीं, यह मैं था जो कुछ खो रहा था - मैंने खुद को व्यापक रूप से रूपांतरणों के साथ भ्रमित कर दिया और सरल दृष्टिकोण की दृष्टि खो दी =) – maerics
मेह, ऐसा होता है। विशेष रूप से सी ++ में जहां सब कुछ करने के लिए एक बेजीलियन तरीके हैं। – Mysticial
क्या 'x और 0xFFFFFFFFL' भी काम करेगा? – Paranaix