gpt4 book ai didi

c# - 如何将 ulong 转换为正整数?

转载 作者:行者123 更新时间:2023-11-30 21:50:05 26 4
gpt4 key购买 nike

我有一段代码是

// 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;

但是有没有更好的方法呢?

更深层次的说,C#中​​容器的索引为什么要用int?我来自 C++ 背景,我们有 size_t,这是一个无符号整数类型。这对我来说更有意义。

最佳答案

使用

return (int)(result % (ulong)Buckets.Count);

当您对值求和时,您得到一个正整数,该整数不能表示为带符号的 32 位整数中的正数。转换为 int 将返回一个负数。然后模运算也将返回一个负数。如果先进行模运算,您将得到一个较小的正数,并且强制转换为 int 不会有任何坏处。

关于c# - 如何将 ulong 转换为正整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com