整数类型的选择
1、没有特别的要求的话,按照时间和空间来权衡,够用即可。
2、除非确实需要存储字符类型,不然,不要使用char来存储小整数,因为编译器会产生额外的代码来进行int型和char型的转换。
3、C语言没有精确的类型大小的定义,C标准只是给出了如下规定:
长整型至少应该和整型一样,而整型至少应该和短整型一样。
char类型至少8位
short和int类型至少16位
long类型至少32位
long long类型至少64位
不同编译器和不同的机器都有不同的范围限制,<limits.h>文件中对各种类型的整数的长度有规定。(相应的浮点型的精度说明在文件<float.h>中)
以下内容节选自gcc编译器的<limits.h>文件
/*
* Characteristics of the char data type.
*
*/
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 255
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX
/*
* Maximum and minimum values for ints.
*/
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)
#define UINT_MAX 0xffffffff
/*
* Maximum and minimum values for shorts.
*/
#define SHRT_MAX 32767
#define SHRT_MIN (-SHRT_MAX-1)
#define USHRT_MAX 0xffff
/*
* Maximum and minimum values for longs and unsigned longs.
*
*/
#define LONG_MAX 2147483647L
#define LONG_MIN (-LONG_MAX-1)
#define ULONG_MAX 0xffffffffUL
/* ISO C9x macro names */
#define LLONG_MAX 9223372036854775807LL
#define LLONG_MIN (-LLONG_MAX - 1)
#define ULLONG_MAX (2ULL * LLONG_MAX + 1)
/*
* The GNU C compiler also allows 'long long int'
*/
#define LONG_LONG_MAX 9223372036854775807LL
#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
#define ULONG_LONG_MAX (2ULL * LONG_LONG_MAX + 1)
4、如果需要在程序中确切指定使用整数类型的精确宽度,可以包含<stdint.h>头文件,然后使用其中的定义类型:
以下节内容选自gcc编译器的<stdint.h>文件
/* 7.18.1.1 Exact-width integer types */
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
如何选择正确的整数类型
最新推荐文章于 2023-08-10 22:35:36 发布