一、CPU位数和数据类型
在嵌入式开发中,不同数据类型的位数和取值范围由CPU的位数决定,我们可以通过sizeof关键词计算出每一种数据类型的范围。
嵌入式开发中熟练掌握各数据类型的取值范围是很有必要的,尤其在长期运行的设备中。比如我们定义了一个int类型的数据,它的正向最大取值为2147483647,换算成天数:2147483647/1000/3600/24,大约是24.85天,如果你定义了一个每隔1ms加一的变量,那么这个值最多只能用24天,超过24天之后这个计数值就会出现基数问题,从而导bug的产生。
二、整数类型的取值范围
不同数据类型在32位CPU和64位CPU上的字节数和取值范围如下:
数据类型 | 32位CPU | 64位CPU | 32位CPU下取值范围 |
---|---|---|---|
char | 1 | 1 | -128~127 (-27~27-1) |
unsigned char | 1 | 1 | 0~255 (0~28-1) |
short int | 2 | 2 | -32767~32768 (-215~215-1) |
unsigned short int | 2 | 2 | 0~65535 (0~216-1) |
int | 4 | 4 | -2147483648~2147483647 (-231~231-1) |
unsigned int | 4 | 4 | 0~4294967295 (0~232-1) |
long | 4 | 8 | -2147483648~2147483647 (-231~231-1) |
long long | 8 | 8 | (-263~263-1) |
三、64位ubuntu下计算出的各数据类型占用的字节数
int main()
{
printf("int:%d\r\nunsigned int:%d\r\nshort int:%d\r\nlong:%d\r\nlong long:%d\r\nchar:%d\r\nunsigned char:%d\r\nfloat:%d\r\ndouble:%d\r\nbool:%d\r\nint*:%d\r\n",
sizeof(int),sizeof(unsigned int),sizeof(short int),sizeof(long),sizeof(long long),sizeof(char),sizeof(unsigned char),sizeof(float),sizeof(double),sizeof(bool),sizeof(int*));
}