Целочисленные типы точной ширины в C (stdint.h) - PullRequest
3 голосов
/ 05 февраля 2011

Я хотел бы, чтобы типы char, short и int имели ширину 1, 2 и 4 байта.Я включил заголовок stdint.h в мои источники.Гарантирует ли это, что целочисленные типы int8_t, int16_t и int32_t будут иметь указанную ширину?Каков наилучший способ добиться этого?

Ответы [ 5 ]

7 голосов
/ 05 февраля 2011

Если эти типы существуют, они имеют правильную ширину и кодируются в виде дополнения до двух.

Изменить: вы должны быть в состоянии проверить, существуют ли типы с чем-то вроде

#ifdef INT32_MAX
...
#endif

но на всех архитектурах конечных пользователей (ПК и т. Д.) Эти типы обычно существуют.

3 голосов
/ 05 февраля 2011

Целевое назначение типов, определенных в stdint.h, состоит в том, чтобы они имели указанную ширину.Таким образом, int8_t будет иметь ширину 8 бит, int16_t - ширину 16 бит и т. Д.

1 голос
/ 05 февраля 2011

C99 stdint.h на самом деле не гарантирует существование этих типов. Цитировать Википедия :

Эти типы являются необязательными, если реализация не поддерживает типы с шириной 8, 16, 32 или 64, тогда она должна определить их для соответствующих типов с соответствующим N.

Однако, если они действительно существуют, они будут правильной ширины.

1 голос
/ 05 февраля 2011

stdint.h некоторые целочисленные типы точной ширины.Это (из wikipedia ):

Specifier   Signing      Bits   Bytes   
int8_t        Signed       8       1    
uint8_t       Unsigned     8       1    
int16_t       Signed       16      2    
uint16_t      Unsigned     16      2    
int32_t       Signed       32      4    
uint32_t      Unsigned     32      4    
int64_t       Signed       64      8 
uint64_t      Unsigned     64      8    

Используйте их, если хотите знать, какой размер для определенного.C99 требует, чтобы эти типы имели указанные размеры.Все остальные типы зависят от платформы.

Для других типов гарантируется минимальная ширина согласно limits.h.Но они также могут быть больше, чем это.Это до реализации.

0 голосов
/ 05 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...