2010-02-27 1 views
28

Я использую хеш-память FNV как алгоритм хэширования в моей реализации таблицы Hash Table, но я получаю предупреждение в заголовке вопроса на этом линия:Невозможно избавиться от «этой десятичной константы без знака только в 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 и что он всегда будет работать так, как должен? –

+0

@Naz: Да. ____ – kennytm

+0

Обратите внимание, что код четко определен и соответствует всем версиям стандарта C - суффикс нужен только для того, чтобы отключить предупреждение, которое в этом случае является ложным. –

 Смежные вопросы

  • Нет связанных вопросов^_^