我有一段代碼,如何將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