C语言之long

在前面的文章,我提到了int,而这篇文章主要写long。通常我们都知道,int二进制取值范围为-32768~32767,如果它的值不在这个范围内,那么编译器就会把它当作long int 类型(当然这个是假设这种类型可以表示该数字的前提),如果它还是超出了long可表示的最大值,则编译器把它当作unsigned long long类型(同时前提也是编译器能够识别该数据类型)。

(一)int数据溢出该如何解决?

如果是数据溢出的话,我们就假设用有符号类型和无符号类型来做一个案例,解决案例如下:

int main(void){
	int test = 2147483647;
	
	unsigned int test1 = 4294967295;
	
	printf("%d %d %d\n",test,test + 1,test + 2);
	printf("%u %u %u\n",test1,test1 + 1,test1 + 2);
	
	return 0;
}

运行效果:

分析:

如上面的代码案例中,可以把整个过程当作跑800米一样,800米第一圈test相当于第一个400,test1相当于第二圈400米的开始和结束,所以test溢出时,test从0开始。 

(二)long输出

在上面的案例中,打印unsigned int test1 = 4294967295想要用到%u,而打印到long则只需要%ld方可,如是long与int相同,可以用%ld输出相应的值,也可以用%d输出相应的值。

int main(void){
	long test = 2147483647;
	
	printf("test values is %ld\n",test);
	
	return 0;
}

运行结果

写到这里的时候,不难以发现,其实它是和int差不多一样的,如果是int溢出,则阅读如上的int数据溢出该如何解决? 

发布了122 篇原创文章 · 获赞 36 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qqj3066574300/article/details/104290139