C中的精确宽度整数类型(stdint.h)

时间:2011-02-04 21:02:34

标签: c integer size

我希望char,short和int类型的宽度为1,2和4字节。我在源代码中添加了 stdint.h 标题。这是否保证int8_t,int16_t和int32_t整数类型的宽度是指定的?实现这一目标的最佳方法是什么?

5 个答案:

答案 0 :(得分:7)

如果存在这些类型,它们具有正确的宽度并以二进制补码编码。

编辑:您应该能够检查类型是否存在类似

#ifdef INT32_MAX
...
#endif

但是在所有最终用户体系结构(PC等)上,这些类型通常都存在。

答案 1 :(得分:3)

stdint.h中定义的类型的全部目的是指定宽度。因此int8_t将是8位宽,int16_t - 16位宽等等。

答案 2 :(得分:1)

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,其他类型保证为某个最小宽度。但他们同样可能比那更重要。这取决于实施。

答案 3 :(得分:1)

C99的stdint.h实际上并不保证存在这些类型。引用wikipedia

  

除非实现支持宽度为8,16,32或64的类型,否则这些类型是可选的,然后它们应该将它们定义为具有相应N的相应类型。

但是,如果他们存在,它们将是正确的宽度。

答案 4 :(得分:0)