1、整数类型:
long int;
long;
short int;
short; ubsigned int; unsigned; unsigned long;unsigned short;long long;
short类型可能比int类型占用的空间少,long类型可能比int类型占用的空间多。C语言只是规定short类型必能比int占用空间多,long不能比int占用空间少
各种类型的int占用的空间不一定时固定的(因为机器的不同而不同),C标准只对基本类型规定了最小大小
在我当前的电脑上(64位机)int的范围【-2147483648,2147483647】,unsigned int 的范围【0,4294967295】,整数溢出后的效果是什么呢?
#include<stdio.h>
int main(void)
{
int i=2147483647;
unsigned int j = 4294967295;
printf("%d %d %d\n",i,i+1,i+2);
printf("%d %d %d\n",j,j+1,j+2);
return 0;
}
结果图下图:
2、打印short、long、long long和unsigned类型
打印unsigned int使用%u转换说明、long使用%ld,如果电脑中的long和int是同样的位数可以直接都用%d打印但是移植到其他不同的机器上的时候会出错。打印八进制和十六进制也是直接在o和x前面加上%。
%hd是指short类型的整数(十进制),h和l前缀都可以和u一起使用(h,l在前,u在后),long long类型用%lld和%llu分别表示有符号和无符号。
//print2.c代码
#include<stdio.h>
int main(void)
{
unsigned int un = 3000000000;
short end = 200;
long big = 65537;
long long verybig = 12345678908642;
printf("un = %u and not %d\n",un,un);
printf("end = %hd and %d\n", end, end);
printf("big = %ld and not %hd\n", big, big);
printf("verybig = %lld and not %ld\n", verybig, verybig);
return 0;
}
结果如下:
结果可能都不会相同(随机器的不同而不同)。
其中需要解释的是第二行的输出,不管使用hd环视d输出的都是200,因为电脑中在给函数传递参数的时候都会转换成int来传递,所以输出的都是一样的。最后一行的输出有的电脑会输出“verybig = 1234567890864 and not 1942899938”我的电脑中long的位数应该是64位的足够显示这个例子中正确的数字,但是如果是32位的就会显示错误的数字。