下面代码可以验证C环境中各种类型的字节长度,在VS2019的环境中,int和long int的字节长度相同,数值范围也是相同的。
#include<stdio.h>
int main()
{
printf("sizeof(short int) = %d\n",sizeof(short int));
printf("sizeof(int) = %d\n", sizeof(int));
printf("sizeof(long int) = %d\n", sizeof(long int));
printf("sizeof(longlong int) = %d\n", sizeof(long long int));
printf("sizeof(unsigned int) = %d\n", sizeof(unsigned int));
printf("sizeof(char) = %d\n", sizeof(char));
return 0;
}
下表为在vs2019中各整型的数值范围。
可以通过下面代码来验证short型的数值范围及查看其溢出方式。
#include <stdio.h>
int main()
{
short maxshort = 32767;
short minshort = -32768;
unsigned short maxunshort = 65535;
unsigned short minunshort = 0;
printf("maxshort=%hd\n", maxshort);
printf("maxshort+1=%hd\n", maxshort+1);
printf("maxshort+11=%hd\n\n", maxshort + 11);
printf("minshort=%hd\n", minshort);
printf("minshort-1=%hd\n", minshort-1);
printf("minshort-11=%hd\n\n", minshort - 11);
printf("maxunshort=%hu\n", maxunshort);
printf("maxunshort+1=%hu\n", maxunshort+1);
printf("maxunshort+11=%hu\n\n", maxunshort + 11);
printf("minunshort=%hu\n", minunshort);
printf("minunshort-1=%hu\n", minunshort - 1);
printf("minunshort-11=%hu\n\n", minunshort - 11);
return 0;
}
从结果中可以看出来,short int的范围就是-32768~32767,而且其溢出方式是类似于一个圈,超出最大值会回到最小值再开始,最大值+1的结果是其最小值,最大值+11就是其最小值+10,unsigned效果是一样的。
下表是short型的存储状态。
变量 | 字节1 | 字节2 |
---|---|---|
maxshort = 32767 | 0111 1111 | 1111 1111 |
minshort = -32768 | 1111 1111 | 1111 1111 |
maxunshort = 65535 | 1111 1111 | 1111 1111 |
minunshort = 0 | 0000 0000 | 0000 0000 |