C++for循环次数上限是多少?

[复制链接]
查看11 | 回复5 | 2017-9-15 02:00:33 | 显示全部楼层 |阅读模式
我变了一个c++程序,其中for循环次数似乎不能超过1.67*10^7.,超过这个数字循环内的语句就不会被执行了。当循环次数是1.677*10^7的时候循环很快就执行完毕,得到正确的结果,可是当循环次数增大到1.68*10^7的时候好像程序就陷入死循环了,始终挑不出来。这究竟是怎么回事呢?是不是真的有上限?
本人的计算机是今天才配的,i7 950,6G内存,win7 64为操作系统。应该是目前顶级配置,会不会是这样的配置VC反而不认?

回复

使用道具 举报

千问 | 2017-9-15 02:00:33 | 显示全部楼层
没次数限制的,但是循环次数过多会影响速度.比如:for (int i = 1; i <= x ; i++) {
x *= i;}这样的写法怎样都会溢出,改正:long result = 1;for (int i = 1; i <= steps ; i++) { //steps 为阶数
result *= i;}
回复

使用道具 举报

千问 | 2017-9-15 02:00:33 | 显示全部楼层
#includevoid main(){ int a=168000000; for(int i=0;i<a;++i){ } cout<<a; return;}执行以上代码得到结果168000000。这证明了3楼不对,你那个32767什么的不现实。从没听说过for有上限,上限什么的
回复

使用道具 举报

千问 | 2017-9-15 02:00:33 | 显示全部楼层
for循环应该没有上限,for(;1;)等价于while(1)是无限循环,你说的那个可能是参数的上限,比如说int i=0;i++;当i到了32767之后再加1就会变成最小的-32766了。这样就形成了死循环。 至于int型变量的取值范围,因编译器的不同而不同。
回复

使用道具 举报

千问 | 2017-9-15 02:00:33 | 显示全部楼层
估计是你这样循环的:for(int i=0; i <N;i++)int为4字节,其取值范围是 - 2^31 ~ 2^31 - 1估计是其循环次数超出了 2^31 - 1,所以会出现你上述情况 2^31 就是1.67710^7级别你可以把i定义成64位, 如int64 i;这样取值范围可达2^63
回复

使用道具 举报

千问 | 2017-9-15 02:00:33 | 显示全部楼层
你的循环控制变量是什么类型的?要int,就不可能出错,再烂的电脑在一秒钟内都能看到结果!看看是不是发生溢出错误了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行