为了移植性能的考虑,为了同一份代码在不同平台不同CPU下都能正确获得对应平台的各种数据大小范围,Linux下使用的宏是这样的:
1 #define INT_MAX ((int)(~0U>>1)) 2 #define INT_MIN (-INT_MAX - 1) 3 #define UINT_MAX (~0U) 4 #define LONG_MAX ((long)(~0UL>>1)) 5 #define LONG_MIN (-LONG_MAX - 1) 6 #define ULONG_MAX (~0UL) 7 #define LLONG_MAX ((long long)(~0ULL>>1)) 8 #define LLONG_MIN (-LLONG_MAX - 1) 9 #define ULLONG_MAX (~0ULL)
以INT_MAX为例说明:符号整型数,0取反得到全F,右移1位空出符号位,得到最大的符号整型数,无论它是16位平台还是32位平台,都是正确的,其他各个功能都类似。