2010-02-27 16 views
28

Używam hash FNV jako algorytm haszowania na mojej tabeli haszowanie realizacji, ale otrzymuję ostrzeżenie w tytule pytanie na ten temat linia:Nie można pozbyć się "tej stałej dziesiętnej jest niepodpisane tylko w ISO C90" ostrzeżenie

unsigned hash = 2166136261; 

nie rozumiem, dlaczego tak się dzieje, ponieważ kiedy to zrobić:

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

uzyskać to:

4294967295 
2166136261 

Który wydaje się być w granicach mojej maszyny ...

Dlaczego otrzymuję ostrzeżenie i jakie są moje opcje, aby się go pozbyć?

Odpowiedz

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

Trzeba przyrostek u oznaczać jest to liczba bez znaku. Bez sufiksu u będzie to oznaczony numer. Od

2166136261 > 2³¹ - 1 = INT_MAX, 

to całkowitą dosłowne będzie problematyczne.

+0

Zakładam, że nie ma to żadnego implikacji w algorytmie mieszania FNV i że zawsze będzie działało tak, jak powinno? –

+0

@Naz: Tak. ____ – kennytm

+0

Należy zauważyć, że kod jest dobrze zdefiniowany i jest zgodny ze wszystkimi wersjami standardu C - sufiks jest tylko "potrzebny" do wyciszenia ostrzeżenia, które w tym przypadku jest fałszywe. –

Powiązane problemy