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

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

unsigned hash = 2166136261;

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

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

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

4294967295
2166136261

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

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

29
задан David Sykes 14 March 2011 в 15:42
поделиться

1 ответ

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

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

2166136261 > 2³¹ - 1 = INT_MAX,

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

42
ответ дан 28 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: