BenBir ulong'u nasıl pozitif int dönüştürebilirim?
// 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;
olan bir kod parçası var ve problem bazen negatif değerler dönen olması. Nedeni biliyorum çünkü (int)result
negatif olabilir. Ama endeks olarak kullanıldığından, negatif olmayan olmaya zorlamak istiyorum. Şimdi farkettim ki,
Ancak daha iyi bir yol var mı?
Daha derin bir düzeyde neden C# içinde kapsayıcılar dizini için int
kullanılır? C++ arkaplanından geliyorum ve imzasız bir integral tip olan size_t
var. Bu bana daha mantıklı geliyor.
Niçin 'int' için' '' '' '' '' '' '' '' ''; Gerekirse 'Buckets.Count '' yerine' ulong 'yazın. Bu, sizi 31 bitlik aralıkla sınırlayacaktır, ancak en azından düzgün bir şekilde çalışıyor :) Daha derin sorularınız için, dizinler mutlaka .NET'te sıfır temelli değildir. -10'dan +10'a uzanan bir diziye sahip olmak tamamen yasal. – Luaan