我有一段代码,如何将ulong转换为正整数?
// Bernstein hash
// http://www.eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx
ulong result = (ulong)s[0];
for (int i = 1; i < s.Length; ++i)
{
result = 33 * result + (ulong)s[i];
}
return (int)result % Buckets.Count;
,问题是,它有时会返回负值。我知道原因是因为(int)result
可能是负面的。但我想强制它是非负的,因为它被用作索引。现在我知道我可以做
int k = (int)result % Buckets.Count;
k = k < 0 ? k*-1 : k;
return k;
但是有没有更好的方法?
在更深层次上,为什么使用int
作为C#中容器的索引?我来自C++背景,我们有size_t
这是一个无符号整型。这对我来说更有意义。
为什么在铸造到'int'之前不要执行'%'?如有必要,可以将'Buckets.Count'转换为'ulong'。这仍然会将你限制在31位范围内,但至少它能正常工作:)至于更深层次的问题,在.NET中,索引不一定是基于零的。拥有从-10到+10的数组是完全合法的。 – Luaan