Intereting Posts
Как я могу конвертировать 4 байта, сохраняя число с плавающей точкой IEEE 754, в значение float в C? Управление стеками в C без использования встроенной сборки C – exec должен немедленно следовать за fork в многопоточном процессе? передача целочисленных аргументов при использовании execve Согласование вызовов x86: должны ли аргументы, передаваемые стеком, только для чтения? winapi CreateWindowEx -> создать кнопку с пользовательскими стилями системы? C макрос с выражением нежелательного результата Хранение большого количества файлов в файловой системе Почему C или C ++ не позволяют передавать массив по значениям Как найти позицию бита с единственным битом в 64-битном значении, используя бит-манипуляцию? strlen в препроцессоре C? Является ли это правильной оптимизацией для цикла используя scanf для проверки входных параметров Что делает execvp на самом деле? Предотrotation переполнения буфера с помощью gets

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

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

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, 

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