Разница между int32, int, int32 t, int8 и int8 t
я наткнулся на тип данных int32_t
в программе C недавно. Я знаю, что он хранит 32 бита, а не int
и int32
сделать то же самое?
кроме того, я хочу использовать char
в программе. Могу ли я использовать int8_t
вместо этого? В чем же разница?
подведем итоги: в чем разница между int32, int, int32_t, int8 и int8_t в C?
3 ответа:
между
int32
иint32_t
(а также междуint8
иint8_t
) разница довольно проста: стандарт C определяетint8_t
иint32_t
, но не определяет ничего с именемint8
илиint32
-- последний (если они вообще существуют), вероятно, из какого-то другого заголовка или библиотеки (скорее всего, предшествует добавлениюint8_t
иint32_t
в C99).простые
int
совсем немного отличается от других. Гдеint8_t
иint32_t
У каждого есть указанный размер,int
может быть любого размера >= 16 бит. В разное время как 16 бит, так и 32 бита были достаточно распространены (и для 64-битной реализации это, вероятно, должно быть 64 бита).С другой стороны,
int
гарантированно присутствует в каждой реализации C, гдеint8_t
иint32_t
нет. Это, вероятно, открытый вопрос, имеет ли это значение для вас, хотя. Если вы используете C на небольших встроенных системах и / или более старых компиляторах, это может быть проблемой. Если вы используете это в первую очередь с современным компилятором на настольных/серверных машинах, это, вероятно, не будет.ой -- пропустил часть о
char
. Вы бы использовалиint8_t
вместо char, если (и только если) вы хотите, чтобы целочисленный тип гарантированно был размером ровно 8 бит. Если вы хотите хранить символы, вы, вероятно, хотите использовать . Его размер может варьироваться (с точки зрения количества бит), но это гарантированно будет ровно один байт. Одна небольшая странность хотя нет гарантий о том, простоchar
является подписанным или неподписанным (и многие компиляторы могут сделать его либо одним, в зависимости от флага времени компиляции). Если вам нужно убедиться, что он подписан или не подписан, вам нужно указать это явно.
типы данных _t являются типами typedef в stdint.H заголовок, в то время как int является встроенным фундаментальным типом данных. Это делает _t доступным только в том случае, если stdint.ч существует. с другой стороны, int гарантированно существует.
всегда имейте в виду, что "размер" является переменной, если явно не указано, так что если вы объявляете
int i = 10;
в некоторых системах это может привести к 16-битному целому числу компилятором, а в некоторых других это может привести к 32-битному целому числу (или 64-битному целому числу в новых системах).
во встроенных средах это может привести к странным результатам (особенно при обработке ввода-вывода с отображением памяти или может рассматриваться как простая ситуация с массивом), поэтому настоятельно рекомендуется указать фиксированный размер переменная. В устаревших системах вы можете встретить
typedef short INT16; typedef int INT32; typedef long INT64;
начиная с C99, дизайнеры добавили stdint.H заголовочный файл, который по существу использует аналогичные typedefs.
в системе на базе windows, вы можете увидеть записи в stdin.заголовочный H-файл как
typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef unsigned char uint8_t;
есть еще что-то вроде минимальной ширины целочисленных или точных целочисленных типов ширины, я думаю, что это не плохо, чтобы исследовать stdint.H для лучшего понимания.