2017-03-01 42 views
-2

我試圖在Java中實現一個簡單的FNV散列函數。該函數要求值2166136261作爲函數參數。在一個online source,該號碼被分配爲十六進制如下:我需要使用long類型來存儲Java中的2166136261嗎?

private static final int FNV_32_INIT = 0x811C9DC5; 

但我不認爲這是正確的,因爲2166136261是大於2147483647這是一個int可以容納的最大值。

我是否正確地假設我至少需要一個類型爲long的變量來存儲值,而不考慮十進制或十六進制?


編輯:

用作本算法的偏移基礎的值是任意的,所以它並不重要是否FNV_32_INIT = 2166136261或某個其它值:

關於offset_basis值:

從FNV-0切換到FNV-1純粹是爲了將offset_basis 更改爲非零值。該非零值的選擇是任意的 。字符串:chongo /../ \被用於 ,因爲測試人員正在查看來自Landon的電子郵件 Landon的標準EMail簽名行。其實做 ,看不太清楚的人。今天,Landon使用()代替<>的 ,他的ASCII蝙蝠使用「oo」眼睛而不是「..」,例如:chongo(Landon Curt Noll)/ \ oo/\我們沒有打擾糾正她的錯誤,因爲它 並不重要。在一般情況下,幾乎任何offset_basis都會在 之間發揮作用,只要它不爲零。

Source

+2

*我是否正確地假設我至少需要一個long類型的變量來存儲值,而不考慮十進制或十六進制?** ** YES **。你加一個'L'來表示常數值是一個'long'; '長十六進制= 0x811C9DC5L;'。當你理解***溢出***時,該值是正確的。 –

+0

@Elliott所以在線來源錯誤? – WHY

+0

我會假設在線來源理解溢出。 –

回答

1

是的,你是正確的。

無論是以十進制,十六進制,二進制,八進制,基數64還是任何其他基數表達,表達式都表示相同的幅度。

相關問題