C++ Visual Studio 2012 Express 命令 window 奇怪的行为
C++ Visual Studio 2012 Express Command window weird behavior
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int riceamount=2,
squarenumber=1,
totalamount=0,
neededrice1000=0,
neededrice1000000=0,
neededrice1000000000=0;
cout<<"Amount of rice you need for the square "<<
squarenumber<<" is " <<riceamount-1<<endl;
cout<<"Amount of rice you need for the square "<<
squarenumber+1<<" is " <<riceamount<<endl;
squarenumber=2;
for(int i=2;i<65;i++)
{
riceamount=riceamount*2;
++squarenumber;
cout<<"Amount of rice you need for the square "<< squarenumber<<" is " <<riceamount<<endl;
totalamount=totalamount+ riceamount;
if (totalamount>1000)
squarenumber=neededrice1000;
if (totalamount>10000000 && totalamount<1100000)
squarenumber=neededrice1000000;
if (totalamount>1000000000 && totalamount<1100000000)
squarenumber=neededrice1000000000;
}
system("pause");
return 0;}
当我调试命令 window 时奇怪地打印数字(在 10 之后它奇怪地变回 1 并继续打印 1 作为平方数然后当 c++ 放弃计算能力时从 2 继续),如下所示从图像,为什么?谢谢你的帮助。 Command window picture
最终 riceamount * 2
溢出 int
类型。
这样做的行为是未定义,但在您的情况下,计算实际上是对 2 的幂取模,对于 2 的大幂为零。
一个unsigned long long
就足够分布在第一个方格上的64个方格中的米粒总数。
after 10 it weirdly turn back to 1 and keep going printing 1 as squarenumber
你告诉它:
if (totalamount>1000)
squarenumber=neededrice1000;
这与Visual Studio命令无关window;这是您程序的既定逻辑。
我建议您使用铅笔和纸逐行浏览,以便理解您所写的内容。
when c++ gave up calculating powers
没有"give up";你的 int
溢出了巨大的数字,所以你的程序有 未定义的行为。
对你来说,这导致了低值,低到以前的 pointed-out 错误不再出现,并且 squarenumber
再次可以在每次迭代中自由增加。
在此示例中,64 位类型就足够了(因此请考虑 uint64_t
)。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int riceamount=2,
squarenumber=1,
totalamount=0,
neededrice1000=0,
neededrice1000000=0,
neededrice1000000000=0;
cout<<"Amount of rice you need for the square "<<
squarenumber<<" is " <<riceamount-1<<endl;
cout<<"Amount of rice you need for the square "<<
squarenumber+1<<" is " <<riceamount<<endl;
squarenumber=2;
for(int i=2;i<65;i++)
{
riceamount=riceamount*2;
++squarenumber;
cout<<"Amount of rice you need for the square "<< squarenumber<<" is " <<riceamount<<endl;
totalamount=totalamount+ riceamount;
if (totalamount>1000)
squarenumber=neededrice1000;
if (totalamount>10000000 && totalamount<1100000)
squarenumber=neededrice1000000;
if (totalamount>1000000000 && totalamount<1100000000)
squarenumber=neededrice1000000000;
}
system("pause");
return 0;}
当我调试命令 window 时奇怪地打印数字(在 10 之后它奇怪地变回 1 并继续打印 1 作为平方数然后当 c++ 放弃计算能力时从 2 继续),如下所示从图像,为什么?谢谢你的帮助。 Command window picture
最终 riceamount * 2
溢出 int
类型。
这样做的行为是未定义,但在您的情况下,计算实际上是对 2 的幂取模,对于 2 的大幂为零。
一个unsigned long long
就足够分布在第一个方格上的64个方格中的米粒总数。
after 10 it weirdly turn back to 1 and keep going printing 1 as squarenumber
你告诉它:
if (totalamount>1000)
squarenumber=neededrice1000;
这与Visual Studio命令无关window;这是您程序的既定逻辑。
我建议您使用铅笔和纸逐行浏览,以便理解您所写的内容。
when c++ gave up calculating powers
没有"give up";你的 int
溢出了巨大的数字,所以你的程序有 未定义的行为。
对你来说,这导致了低值,低到以前的 pointed-out 错误不再出现,并且 squarenumber
再次可以在每次迭代中自由增加。
在此示例中,64 位类型就足够了(因此请考虑 uint64_t
)。