Нужно ли добавлять суффикс `u` к целым числам без знака? - PullRequest
7 голосов
/ 12 апреля 2019

Я знаю, что суффикс u означает «без знака». Но в необходимо в следующем коде?

uint32_t hash = 2166136261u;

Это вопрос или соглашение? Или это имеет какое-то техническое значение в этом случае? В любом случае значение следует преобразовать в unsigned, поскольку uint32_t unsigned.

Когда и когда не следует использовать суффикс u для целочисленных значений без знака?

1 Ответ

4 голосов
/ 12 апреля 2019

нет не нужно. Вещи становятся интересными в 2147483648, и ваш номер больше этого.

Обратите внимание, что формально 2166136261 имеет тип long или long long, если int имеет 32 бита или менее. Но любой из них может быть преобразован в uint32_t четко определенным образом.

В качестве конечной точки: эквивалентный гекс 0x811C9DC5 имеет тип unsigned, если int имеет 32 или более бит. О, радость!

Ссылка: https://en.cppreference.com/w/c/language/integer_constant

...