2010-02-27 39 views
28

我在我的哈希表實現中使用FNV哈希作爲哈希算法,但我在問題標題中獲得了此警告行:無法擺脫「這個十進制常量僅在ISO C90中無符號」警告

unsigned hash = 2166136261; 

我不明白爲什麼會這樣,因爲當我這樣做:

printf("%u\n", UINT_MAX); 
printf("2166136261\n"); 

我得到這個:

4294967295 
2166136261 

這似乎是在我的機器的限制...

爲什麼我會得到警告,我有什麼選擇擺脫它?

回答

41
unsigned hash = 2166136261u; // note the u. 

您需要一個後綴u來表示這是一個無符號數。如果沒有u後綴,它將是一個有符號的數字。由於

2166136261 > 2³¹ - 1 = INT_MAX, 

此整數字面值會有問題。

+0

我認爲這不會對FNV哈希算法產生任何影響,並且它會始終如其工作? – 2010-02-27 16:23:52

+0

@納茲:是的。 ____ – kennytm 2010-02-27 19:16:23

+0

請注意,該代碼已定義良好,並符合C標準的所有版本 - 後綴僅用於「需要」以使此警告消失,在此情況下,該警告是虛假的。 – 2017-01-10 01:30:05