gpt4 book ai didi

c# - 我只是注意到我从对象中获得了不同的哈希码,具体取决于我是针对x86还是64版本构建的。我还能这样做吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:43 24 4
gpt4 key购买 nike

我注意到为x86或x64构建时,从其他对象获得的哈希码是不同的。
到目前为止,我已经实现了大多数自己的哈希函数,如下所示:

int someIntValueA;
int someIntValueB;

const int SHORT_MASK = 0xFFFF;
public override int GetHashCode()
{
return (someIntValueA & SHORT_MASK) + ((someIntValueB & SHORT_MASK) << 16);
}


在64位系统上,将这些值存储很长时间并从中获取哈希码是否会给我带来更大的范围,还是一个坏主意?

public override int GetHashCode()
{
long maybeBiggerSpectrumPossible = someIntValueA + (someIntValueB << 32);
return maybeBiggerSpectrumPossible.GetHashCode();
}

最佳答案

不,那会更糟。

假设您的int值通常在short范围内:-30000到+30000之间。并进一步假设它们中的大多数都位于中间位置,例如介于0到1000之间。这很典型。使用第一个哈希码,您将两个int的所有位都放入了哈希码中,并且它们不会相互干扰;在典型情况下,碰撞次数为零。

但是,当您花了很长时间来完成技巧时,您将依赖于GetHashCode的长距离实现所执行的操作,即将高32位与低32位进行异或。因此,您的新实现只是编写int1 ^ int2的慢速方式。在典型情况下,它几乎具有零位,因此到处都有冲突。

关于c# - 我只是注意到我从对象中获得了不同的哈希码,具体取决于我是针对x86还是64版本构建的。我还能这样做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705433/

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