为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )相关的知识,希望对你有一定的参考价值。

背景

2147483647刚好是2^32/2-1,但是不知道为什么循环次数不能超过这个次数

代码:

#include <stdio.h>
 
int main()

  while (1)  // 一个死循环
  
  	//for(int i=0;i<2147483648;i++)	//no
	for(int i=0;i<2147483647;i++)	//yes
	
	printf("测试结束\\n");
  

原因


在我的ubuntu系统下,int取值范围是-2147483648~2147483647

int i = 2147483647 加一后确实变成了 -2147483648,所以上面的for(int i=0;i<2147483648;i++)代码将会进入永无止境的循环中。。。。

(看看 int i =2147483647 加一是多少)

#include <stdio.h>
 
int main()

 	int i =2147483647;
	printf("%d\\n", ++i);

ubuntu上编译运行结果:

[yg@ubuntu /arnold_test/20220113_TEST_signal]110$ ./a.out 
-2147483648

解决办法

解决办法就是将 int 改成 size_t,size_t 范围大且不会是负数

以上是关于为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu-64位下hadoop安装

关于Ubuntu 12.04 64位下的libpcre.so.0

Alter Table 在 MS Access 64 位下不起作用。为啥?

PHP for循环中怎么让字符串超过固定特定长度后自动换行?

在Ubuntu16.04 64位下搭建samba,实现linux与windows之间的资源共享

C语言for循环嵌套延时问题