Невозможно избавиться от "этой десятичной константы без знака только в ISO C90"

Я использую хеш FNV в качестве хэширующего алгоритма для моей реализации Hash Table, но я получаю предупреждение в заголовке вопроса в этой строке:

unsigned hash = 2166136261;

Я не понимаю, почему это происходит, потому что когда я это делаю:

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

Я получаю это:

4294967295
2166136261

Что, кажется, находится в пределах моей машины...

Почему я получаю предупреждение и какие у меня варианты, чтобы избавиться от него?

Ответ 1

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

Вам нужно суффикс u, чтобы обозначить это неподписанное число. Без суффикса u это будет подписанное число. Так как

2166136261 > 2³¹ - 1 = INT_MAX,

этот целочисленный литерал будет проблематичным.