gpt4 book ai didi

c - 无符号整数溢出不 "wrap around"

转载 作者:行者123 更新时间:2023-11-30 18:24:51 24 4
gpt4 key购买 nike

我从 Integer Overflow Wiki 中读到了以下行:

while unsigned integer overflow causes the number to be reduced modulo a power of two, meaning that unsigned integers "wrap around" on overflow.

我有下面的代码,我试图创建一个哈希函数并遇到 int 溢出情况。我尝试使用 unsigned int 来缓解它,但它不起作用,而且我能够看到负值。

我知道我可以用其他方式处理它并且它有效,如我的代码注释 - 注释 2: 所示。但这是正确的方式吗?为什么 unsigned int 没有回绕和溢出?

int hash(char *word) {
char *temp = word;
unsigned int hash = 0; // Comment 1: I tried to handle int overflow using "unsigned" int.
while (*word != '\0') {
// Comment 2: This works but I do not want to go this way.
//while ((hash * PRIME_MULTIPLIER) < 0) {
// hash = (hash * PRIME_MULTIPLIER) + 2147483647;
//}
hash = hash * PRIME_MULTIPLIER + *word;
word++;
}
printf("Hash for %s is %d\n", temp, hash);
return hash;
}

最佳答案

您对 printf 使用了错误的格式说明符。对于 unsigned int,您应该使用 %u 而不是 %d

此外,您应该返回一个 unsigned int 而不是 int

关于c - 无符号整数溢出不 "wrap around",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443697/

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