Разница между 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 69

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 для лучшего понимания.