Ответ 1
какая разница с uint32_t
uint_fast32_t
представляет собой неподписанный тип, по меньшей мере, 32 бита, который (каким-то общим способом) является самым быстрым из таких типов. "быстрый" означает, что, учитывая выбор, разработчик, вероятно, будет выбирать размер, для которого у архитектуры есть арифметические, нагрузка и сохранение инструкций. Это не победитель какого-либо конкретного теста.
uint_least32_t
- наименьший неподписанный тип не менее 32 бит.
uint32_t
- это тип ровно 32 бит без заполнения, если такой тип существует.
Я прав?
Нет. Если uint24_t
существует вообще, то это целочисленный тип, а не struct
. Если в этой реализации нет целочисленного типа без знака 24 бита, он не существует.
Поскольку unsigned long
требуется как минимум 32 бита, единственными стандартными типами, которые uint24_t
могли бы быть когда-либо псевдонимом, являются char
, unsigned char
, unsigned short
и unsigned int
. В качестве альтернативы это может быть расширенный тип (то есть целочисленный тип, предоставляемый реализацией, который не является одним из определенных целочисленных типов в стандарте).
Вы предложите мне использовать uint48_t для моих 48-разрядных целых чисел без знака?
Если он существует и является желаемым, вы можете его использовать. Однако он не будет существовать на очень многих реализациях, поэтому он подходит только для использования в переносном коде. Это ОК обеспечило причину, по которой вам приходится иметь дело с точными 48-битными целыми, зависит от платформы.
Точные 16, 32 и 64-битные типы также являются технически необязательными, но они должны существовать, если реализация имеет подходящие целочисленные типы. "Подходящий" означает не только то, что существует точный N-разрядный неподписанный тип без битов заполнения, но также и то, что соответствующий подписанный тип не имеет заполняющих битов и использует 2 дополнительных представления. На практике это настолько близко, что вы ограничиваете переносимость очень мало, используя любой из них. Для максимальной переносимости вы должны использовать uint_least32_t
или uint_fast32_t
, предпочитая uint32_t
. Какая из них зависит от того, будете ли вы больше заботиться о скорости или размере. По моему опыту очень мало людей беспокоятся, поскольку платформы, у которых нет 32-битного целочисленного типа, уже настолько странны, что большинство людей не заботятся о том, работает ли на них свой код или нет.