我正在Java中实现Skein哈希函数,其中一部分涉及到对某些加法取模2^64。正如我们所知,Java中的long类型最大值为2^63-1。因此我的问题是,如何实现这个模运算。 (Skein中的所有操作都在64位字上进行。)
Java
中的long
是64位的,所以所有的运算都已经是模2^64了。你不需要做任何额外的事情来实现这一点。
问题在于你不知道如何处理带符号的值吗?
这是你想要的东西还是你试图避免的东西?
byte[]
(而不是Byte[])。 - Peter LawreyUnsignedLongs
的作者在此:Peter 的回答对于无符号长整型基本上是准确的。具体来说,即使将长整型视为无符号值,+、- 和 * 仍然都是正确的。此外,您可能会发现使用 UnsignedLong
包装类很有帮助,它可以像 BigInteger
一样使用,但对于模 2^64 有效。 - Louis Wasserman
BigInteger
。 - Sergey Kalinichenko