Не удается избавиться от предупреждения “эта десятичная константа без знака только в ISO C90”

StackOverflow https://stackoverflow.com/questions/2347936

Вопрос

Я использую хэш 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,

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top