我試圖在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都會在 之間發揮作用,只要它不爲零。
*我是否正確地假設我至少需要一個long類型的變量來存儲值,而不考慮十進制或十六進制?** ** YES **。你加一個'L'來表示常數值是一個'long'; '長十六進制= 0x811C9DC5L;'。當你理解***溢出***時,該值是正確的。 –
@Elliott所以在線來源錯誤? – WHY
我會假設在線來源理解溢出。 –