您的位置:首页 > 其它

C核心技术手册(十五)

2010-12-08 22:46 211 查看

具有精确宽度的整数类型

整数类型的宽度定义为表示此整型值所使用的位的个数,包括符号位,典型的宽度有8、16、32、64位。例如,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=8、16、32、64

Int_fastN_t

uint_fastN_t

宽度至少为N位的fast类型

要求N=8、16、32、64

Intmax_t

Uintmax_t

最大的宽度

要求

Intptr_t

Uintptr_t

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

optional

例如,int_least64_t和uint_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_t或uint_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()中的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: