Невозможно избавиться от "этой десятичной константы без знака только в 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,
этот целочисленный литерал будет проблематичным.