C核心技术手册(十五)

具有精确宽度的整数类型

  整数类型的宽度定义为表示此整型值所使用的位的个数,包括符号位,典型的宽度有8163264位。例如,int类型的宽度至少为16位。

  C99中,头文件stdint.h定义了整数类型的宽度,这些类型列举在Table 2-5.中,其中以u开头的表示unsigned.下表中不是C99要求必须提供的使用”optional”标记。

                Table 2-5. Integer types with defined width

类型

含义

执行

intN_t

uintN_t

宽度为N位的整型

optional

Int_leastN_t

Uint_leastN_t

宽度至少为N位的整形

要求N=8163264

Int_fastN_t

uint_fastN_t

宽度至少为N位的fast类型

要求N=8163264

Intmax_t

Uintmax_t

最大的宽度

要求

Intptr_t

Uintptr_t

宽度可以存储一个指针的整型

optional

 

例如,int_least64_tuint_least64_t都是宽度至少为64位的整型,如果可选的有符号类型(不带前缀u)被定义,相应地,也要求无符号类型(带有前缀u)也要求被定义,反之亦然。下面的例子中定义和初始化了一个元素为int_fast32_t类型的数据。

#define ARR_SIZE 100 int_fast32_t arr[ARR_SIZE]; // Define an array arr // with elements of type int_fast32_t for ( int i = 0; i < ARR_SIZE; ++i ) arr[i] = (int_fast32_t)i; // Initialize each element

Table 2-4中列举的类型通常为已存在标准库的同义词,例如,一个C编译器在stdint.h中有下面语句:

  typedef signed char    int_fast8_t;

这个声明将int_fast8_t定义为等价的signed char.此外,有的实现也可能定义如int24_tuint_least128_t等扩展类型。

  有符号类型intN_t具有一个特性,它们必须使用2的补码来表示,所以,它们的最小值为-2,最大值为2N-1 – 1

  Stdint.h中定义的类型的范围也很好获得,这个文件中也定义了获取最大值和最小值的宏,宏的名子使用大写字母,将类型中的_t命使用_MAX_MIN替代,例如,下例中使用最小值初始化了变量i64

  int_least64_t i64 = INT_LEAST64_MIN;

 头文件inttypes.h包含了stdint.h,它提供了其他的一些特性,例如扩展整型在函数printf()scanf()中的使用。

你可能感兴趣的:(C核心技术手册(十五))