Или это зависит от 16-битного, 32-битного и т. Д. Компилятора?Действительно ли int8_t, int16_t, int32_t и int64_t имеют одинаковые диапазоны для разных компиляторов C++?
Кроме того, являются ли эти типы данных действительными в C, C# или Java?
Или это зависит от 16-битного, 32-битного и т. Д. Компилятора?Действительно ли int8_t, int16_t, int32_t и int64_t имеют одинаковые диапазоны для разных компиляторов C++?
Кроме того, являются ли эти типы данных действительными в C, C# или Java?
intN_t
является точной шириной целочисленного типа N
бит длиной. За проект C11 N1570 7.2.1.1 они определяются как:
Название ЬурейеГо intN_t обозначает целочисленный тип с шириной N, не заполняющих бит, и представлением дополнительного кода. Таким образом, int8_t обозначает такой подписанный целочисленный тип с шириной ровно 8 бит.
Однако
Эти типы не являются обязательными. Однако, если реализация предоставляет целочисленные типы с шириной 8, 16, 32 или 64 бита, без битов дополнений и (для подписанных типов), которые имеют представление двух дополнений, оно должно определять соответствующие имена typedef.
Эти типы действительны на языках C и C++. Поэтому мы имеем это как нормальный short
, int
и long long
не имеют никаких гарантий на их размер при минимальном диапазоне
В C# это было бы эквивалентно типам Int16, Int32 и Int64 кроме. В Jave мы можем использовать byte
, short
, int
и long
как те все guaranteed to be of an exact width.
Стандарт C++ требует, чтобы int8_t
, int16_t
, int32_t
и int64_t
быть точно заданной ширины, с коллегами без знака с префиксом u
, , только если такие виды существуют на целевой платформе. И да, это допустимые стандартные типы в C. Java и C# не содержат таких интегральных типов данных с одинаковыми именами.
Связанные категории: intN_least_t
и intN_fast_t
, где «наименее» типы имеют не менее указанного количества бит.
У них одинаковый диапазон, основанный на std C++. Подробнее here
и они действительны на C, но не уверен, что на Java и C#
Этот ответ означает, что C++ стандарт предписывает, что каждый опорный компилятор 'Int основной() {int64_t х; } 'как действительную программу. Это не. Не могли бы вы уточнить? – Yakk
Они доступны в 'stdint.h'. Включили ли вы заголовок – dlmeetei
. Стандарт C++ * не предусматривает *, что они находятся в 'stdint.h'. В нем говорится, что может быть там, и если они есть, они должны обладать определенными свойствами. То, что происходит в вашем 'stdint.h' (или моем), не решает проблему. – Yakk
Можете ли вы привести источник своих цитат? (какой проект C99-esque, или он из реального?) http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf представляется черновиком какого-либо типа с аналогичная (точно такая же?) формулировка в ней. – Yakk
@Yakk Я добавил свой источник. Я полностью пропустил эту часть. Сожалею. – NathanOliver