對於Java中的某些哈希函數,將該值視爲無符號整數(例如,用於與其他實現進行比較)會很好,但是Java僅支持簽名類型。我們可以將簽署int
轉換爲「無符號」 long
這樣:將有符號整數轉換爲無符號長整型的最佳方法?
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
然而,這種解決方案似乎是矯枉過正我們真正做的事情。有沒有更高效的方法來實現同樣的目標?
+1。不,是我失去了一些東西 - 我把自己與擴大轉換混爲一談,忽略了簡單的方法=) – maerics 2012-03-06 06:04:09
呃,它發生了。特別是在C++中,有一些方法可以完成所有工作。 – Mysticial 2012-03-06 06:06:34
'x&0xFFFFFFFFL'也可以嗎? – Paranaix 2012-11-29 16:33:20