我讀以下從Integer Overflow Wiki行:無符號整數溢出不會「環繞」
而無符號整數溢出導致數目減少模 二的冪,即無符號整數「環繞」在 溢出。
我有下面的代碼,我試圖創建一個哈希函數並得到int溢出情況。我試圖通過使用unsigned int
來緩解它,但它不起作用,我能看到負面的價值。
,我知道我能應付其他的方式和它的作品,如在我的代碼註釋 - Comment 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;
}
當你說「沒有工作」,你是什麼意思? –
請注意,這是素數非常不理想的選擇。你基本上正在計算'word [0] - word [1] + word [2] - word [3] ...' –
@ChrisBeck更新。我的意思是我能看到負面的價值。 – hagrawal