C语言的基础数据类型:短整型short 整型int 长整型 long 单精度浮点型float 双精度浮点型double 字符型 char
整型:根据存储最高位是否是符号位,可以分有符号整型(signed)和无符号整型(unsigned),默认情况下是有符号整型,如果表示无符号整型,要在类型前面添加unsigned;
浮点型:浮点型主要用来表示带小数部分的数据,当然也可以存放整数;
字符型:字符型主要是用来存储单个字符,用单引号引起来;
为什么要有数据类型的区分?其一是不同的数据我们对数据的处理方式是不同,比如我们可以对数值型的数据进行加减乘除的运算,对字符类型的数据就不适合进行此类的运算;其二有效地利用内存空间,不同的数据类型,存储精度的要求不同,根据数据类型分配相应大小的字节,可以有效地利用存储空间,特别是在嵌入式开发中,内存存储空间是非常有限的。 当然数据类型的区分还有一些其他的好处,大家根据自己的知识理解其中的原因就行。
下面我们使用dev C++,编程看一下不同的数据类型运行时内存分配的字节数以及可以该数据类型可以表示的数据范围:
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main(){
printf("基础数据类型 所占字节数 表示数据范围\n");
printf("\n");
printf(" short %d %d---%d\n",sizeof(short),SHRT_MIN,SHRT_MAX);
printf(" int %d %d---%d\n",sizeof(int),INT_MIN,INT_MAX);
printf(" long %d %ld---%ld\n",sizeof(long),LONG_MIN,LONG_MAX);
printf(" unsinged short %d %u---%u\n",sizeof(unsigned short),0,USHRT_MAX);
printf(" unsigned int %d %u---%u\n",sizeof(unsigned int),0,UINT_MAX);
printf(" unsigned long %d %u---%u\n",sizeof(unsigned long),0,ULONG_MAX);
printf(" float %d %e---%e\n",sizeof(float),FLT_MIN,FLT_MAX);
printf(" double %d %le---%le\n",sizeof(double),DBL_MIN,DBL_MAX);
//char输出的是字符对应的ASCII码
printf(" char %d %d---%d\n",sizeof(char),CHAR_MIN,CHAR_MAX);
}
运行效果图:
在DEV C++中,光标放在包含文件<limits.h>,按住Ctrl键,点击鼠标,可以打开limits.h头文件,可以看到整型数据表示范围的宏定义,部分如下:
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 0xff
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX
#define MB_LEN_MAX 5
#define SHRT_MIN (-32768)
#define SHRT_MAX 32767
#define USHRT_MAX 0xffffU
#define INT_MIN (-2147483647 - 1)
#define INT_MAX 2147483647
#define UINT_MAX 0xffffffffU
#define LONG_MIN (-2147483647L - 1)
#define LONG_MAX 2147483647L
#define ULONG_MAX 0xffffffffUL
#define LLONG_MAX 9223372036854775807ll
#define LLONG_MIN (-9223372036854775807ll - 1)
#define ULLONG_MAX 0xffffffffffffffffull
同样的操作,光标放在包含文件<float.h>,按住Ctrl键,点击鼠标,可以打开float.h头文件,可以看到浮点数据表示范围的宏定义,部分如下:
#undef FLT_MAX
#undef DBL_MAX
#undef LDBL_MAX
#define FLT_MAX __FLT_MAX__
#define DBL_MAX __DBL_MAX__
#define LDBL_MAX __LDBL_MAX__
/* Minimum normalized positive floating-point number, b**(emin - 1). */
#undef FLT_MIN
#undef DBL_MIN
#undef LDBL_MIN
#define FLT_MIN __FLT_MIN__
#define DBL_MIN __DBL_MIN__
#define LDBL_MIN __LDBL_MIN__