2016-02-01 1 views

ответ

4

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.

+0

Можете ли вы привести источник своих цитат? (какой проект C99-esque, или он из реального?) http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf представляется черновиком какого-либо типа с аналогичная (точно такая же?) формулировка в ней. – Yakk

+0

@Yakk Я добавил свой источник. Я полностью пропустил эту часть. Сожалею. – NathanOliver

5

Стандарт C++ требует, чтобы int8_t, int16_t, int32_t и int64_t быть точно заданной ширины, с коллегами без знака с префиксом u, , только если такие виды существуют на целевой платформе. И да, это допустимые стандартные типы в C. Java и C# не содержат таких интегральных типов данных с одинаковыми именами.

Связанные категории: intN_least_t и intN_fast_t, где «наименее» типы имеют не менее указанного количества бит.

0

У них одинаковый диапазон, основанный на std C++. Подробнее here

и они действительны на C, но не уверен, что на Java и C#

+0

Этот ответ означает, что C++ стандарт предписывает, что каждый опорный компилятор 'Int основной() {int64_t х; } 'как действительную программу. Это не. Не могли бы вы уточнить? – Yakk

+0

Они доступны в 'stdint.h'. Включили ли вы заголовок – dlmeetei

+0

. Стандарт C++ * не предусматривает *, что они находятся в 'stdint.h'. В нем говорится, что может быть там, и если они есть, они должны обладать определенными свойствами. То, что происходит в вашем 'stdint.h' (или моем), не решает проблему. – Yakk

Смежные вопросы