2017-03-01 39 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还是任何其他基数表达,表达式都表示相同的幅度。

相关问题