在我们的C语言中有很多的类型,其中整型的位宽应该是针对于CPU的位数而言的(我的学习理解),然后就出现了一个问题,对于8051单片机来说,CPU是8位的,然而int类型占用的是两个字节,也就是16位,那通过更进一步的了解发现,这个不仅仅和CPU的位数有关,主要和C语言标准有关(这里可以说是和编译器有关,因为所有的C编译器都是根据C语言标准走的)
那么由于C标准定义了int类型和short类型的最小占用字节数是16位,所以在8位CPU上面的int和short类型都是两个字节,也就是16位,但是我们所用的单片机课本里没有列出short的字节长度,但是short这个变量仍然存在,个人觉得在单片机中没有使用short的必要(前提是8位和16位的单片机)下面抄录了部分C标准定义的内容作为记录。
这里抄录的部分内容来自:https://blog.csdn.net/u012842205/article/details/50943609
C语言的实现一般由编译器和标准库开发者提供,而这部分开发者有很多,常见的编译器有微软的vc,GNU的gcc,Borland的TC,Intel也有自己的C编译器。各个提供者都有自己的想法,都可能会往语言特性中加入一些新的扩展实现,比如一些关键字,一些标准没有的标准库函数,或是一些标准库函数的返回值与其他的不一样等等。但他们都会遵循C语言标准,即是我们常听说的C99、C90/C89、C11等等。
C标准定义:
int类型是一个类型系列,在C语言中,基本的int 类型包括char,long,int,short,bool(_Bool关键字,C99)。C99标准中说明了,实现必须等于或大于<limits.h>的定义。
以下列出所有C标准中定义的类型(C99):
char: 机器上最小的地址单元。头文件中对应CHAR_BIT,8 bits;
signed char:与char长度相同,范围必须能承载至少[-127,+127],即8 bits大小,其中一位用作符号位;
unsigned char:与char长度相同,但无符号位,范围大小为[0, 2^CHAR_BIT - 1],8 bits;
short或者short int或者signed short或者signed short int:这四种为带符号的short类型,必须能承载至少[-32767, +32768]范围,也即是至少16bits长度。
unsigned short或者unsigned short int: 同short相同, 但无符号,长度至少16bits。
int或者signed int:基本的int,必须能至少承载[-32767, +32767]范围,也即是说,至少16bits长度。
unsigned int:同int,但无符号,长度至少16bits。
long或者long int或者signed long或者signed long int:
long 型的整数,必须能承载至少[-2147483647, +2147483647]范围,也就是至少32bits长度。(注:只有一个long)
long long或者long long int或者signed long long或者signed long long int:
long long 类型,必须至少能承载[-9223372036854775807, +9223372036854775807],也就是至少64bits长度。