首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >乘法时避免整数溢出的有效方法?

乘法时避免整数溢出的有效方法?
EN

Stack Overflow用户
提问于 2010-05-05 03:02:26
回答 4查看 743关注 0票数 1

我正在研究一个哈希函数,它将一个字符串作为输入。

现在,我正在做一个循环,在hash (一个int变量)中乘以一个值,然后将当前字符的ASCII代码添加到混合中。

代码语言:javascript
复制
hash = hash * seed + string[i]

但有时,如果字符串足够大,有一个整数溢出,我可以做什么来避免它,同时保持相同的哈希结构?也许在循环中包含一点操作?

EN

Stack Overflow用户

发布于 2010-05-05 03:17:21

如果您可以访问更大的数据类型,则可以执行以下操作:

代码语言:javascript
复制
int32_t hash, seed;
int64_t temporary;

temporary = hash * seed + string[i];
hash = ( temporary >> 32 ) ^ ( temporary & 0xFFFFFFFF );

否则,您将不得不手动将散列和种子相乘为两个值,使用overflow添加stringi,然后将这两个值相加^。

哈希是隐式有损的,因此,除非有特定的原因需要它们,如匹配现有算法,否则就让溢出的比特消失,这应该是可以的。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2768183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档