Я использую хеш FNV в качестве алгоритма хеширования для моей реализации Хеш-таблицы, но я получаю предупреждение в заголовке вопроса на этой строке:
unsigned hash = 2166136261;
Я не понимаю, почему это происходит потому что, когда я делаю это:
printf("%u\n", UINT_MAX);
printf("2166136261\n");
Я получаю это:
4294967295
2166136261
Который, кажется, находится под пределами моей машины...
Почему я получаю предупреждение и что мои опции состоят в том, чтобы избавиться от него?
unsigned hash = 2166136261u; // note the u.
Вам нужен суффикс u
, чтобы указать, что это беззнаковое число. Без суффикса u
это будет число со знаком. Поскольку
2166136261 > 2³¹ - 1 = INT_MAX,
этот целочисленный литерал будет проблематичным.